数据存储错误:BadValueError:期望的整数,得到[0,1,2,3]

问题描述 投票:0回答:1

其他人报告了类似的错误,但是给出的解决方案不能解决我的问题。For example there is a good answer here.链接中的答案提到了ndb从第一次使用到后来使用的变化,并暗示了一个问题,因为第一次运行会在数据存储区中产生None。我无法在我的SDK的数据存储区中复制或看到这种情况,但这可能是因为我是从交互式控制台在此处运行它的。

我很确定我最初使用GAE交互式控制台运行良好,但是此后的每次运行都因该问题的标题错误而失败。

我在以下代码中保留了打印语句,因为它们显示出良好的结果,并向我保证在最后put()中会发生错误。

from google.appengine.ext import ndb

class Account(ndb.Model):

    week = ndb.IntegerProperty(repeated=True)
    weeksNS = ndb.IntegerProperty(repeated=True)
    weeksEW = ndb.IntegerProperty(repeated=True)

terry=Account(week=[],weeksNS=[],weeksEW=[])
terry_key=terry.put()
terry = terry_key.get()
print terry

for t in list(range(4)):     #just dummy input, but like real input
    terry.week.append(t)
print terry.week

region = 1                   #same error message for region = 0
if region :
    terry.weeksEW.append(terry.week)
else:
    terry.weeksNS.append(terry.week)

print 'EW'+str(terry.weeksEW)
print 'NS'+str(terry.weeksNS)
terry.week = []
print 'week'+str(terry.week)
terry.put()

我的代码的想法是先逐步建立terry.week列表值,然后再将整个列表存储到适当的区域,即NS或EW。因此,我正在寻找此方案的解决方法。

错误消息可能没有任何价值,但我在这里重现。

Traceback (most recent call last):
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/runtime/request_handler.py", line 237, in handle_interactive_request
    exec(compiled_code, self._command_globals)
  File "<string>", line 55, in <module>
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/model.py", line 3458, in _put
    return self._put_async(**ctx_options).get_result()
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/tasklets.py", line 383, in get_result
    self.check_success()
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/tasklets.py", line 427, in _help_tasklet_along
    value = gen.throw(exc.__class__, exc, tb)
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/context.py", line 824, in put
    key = yield self._put_batcher.add(entity, options)
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/tasklets.py", line 430, in _help_tasklet_along
    value = gen.send(val)
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/context.py", line 358, in _put_tasklet
    keys = yield self._conn.async_put(options, datastore_entities)
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/datastore/datastore_rpc.py", line 1858, in async_put
    pbs = [entity_to_pb(entity) for entity in entities]
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/model.py", line 697, in entity_to_pb
    pb = ent._to_pb()
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/model.py", line 3167, in _to_pb
    prop._serialize(self, pb, projection=self._projection)
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/model.py", line 1422, in _serialize
    values = self._get_base_value_unwrapped_as_list(entity)
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/model.py", line 1192, in _get_base_value_unwrapped_as_list
    wrapped = self._get_base_value(entity)
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/model.py", line 1180, in _get_base_value
    return self._apply_to_values(entity, self._opt_call_to_base_type)
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/model.py", line 1352, in _apply_to_values
    value[:] = map(function, value)
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/model.py", line 1234, in _opt_call_to_base_type
    value = _BaseValue(self._call_to_base_type(value))
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/model.py", line 1255, in _call_to_base_type
    return call(value)
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/model.py", line 1331, in call
    newvalue = method(self, value)
  File "/Users/brian/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/model.py", line 1781, in _validate
    (value,))
BadValueError: Expected integer, got [0, 1, 2, 3]
google-app-engine app-engine-ndb
1个回答
0
投票

我相信错误来自以下几行:

© www.soinside.com 2019 - 2024. All rights reserved.