ndb.ComputedProperty causes 'RuntimeError: maximum recursion depth exceeded'
ndb.ComputedProperty causes 'RuntimeError: maximum recursion depth exceeded'
这是我的 class Stat
。我正在向 class 添加一个新的计算 属性,它将自动对现有 class
中的各种计数求和
class Stat(ndb.Model):
visit_count = ndb.IntegerProperty(default=0)
exit_count = ndb.IntegerProperty(default=0)
# New code
def _get_total_count(self):
return self.visit_count + self.exit_count
response_count = ndb.ComputedProperty(lambda self: self._get_total_count)
当我创建这个 class 的实例并保存它时
stat = Stat(visit_count=0, exit_count=2)
stat.put()
我得到这个异常:
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 1207, in _value_to_repr
return repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 3013, in __repr__
rep = prop._value_to_repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 1207, in _value_to_repr
return repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 3013, in __repr__
rep = prop._value_to_repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 1207, in _value_to_repr
return repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 3013, in __repr__
rep = prop._value_to_repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 1207, in _value_to_repr
return repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 3013, in __repr__
rep = prop._value_to_repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 1207, in _value_to_repr
return repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/key.py", line 357, in __repr__
if self.app() != _DefaultAppId():
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/key.py", line 824, in _DefaultAppId
return os.getenv('APPLICATION_ID', '_')
File "/Users/antkong/dev/zeetings/zeetings-ve/bin/../lib/python2.7/os.py", line 515, in getenv
return environ.get(key, default)
File "/Users/antkong/dev/zeetings/zeetings-ve/bin/../lib/python2.7/UserDict.py", line 58, in get
def get(self, key, failobj=None):
RuntimeError: maximum recursion depth exceeded
如果我删除计算 属性,put
可以毫无问题地执行。
我该如何解决这个问题?
response_count = ndb.ComputedProperty(lambda self: self._get_total_count)
意味着您为 ComputedProperty
返回的值是 函数 self._get_total_count
- 您没有调用它。
response_count = ndb.ComputedProperty(lambda self: self._get_total_count())
这是我的 class Stat
。我正在向 class 添加一个新的计算 属性,它将自动对现有 class
class Stat(ndb.Model):
visit_count = ndb.IntegerProperty(default=0)
exit_count = ndb.IntegerProperty(default=0)
# New code
def _get_total_count(self):
return self.visit_count + self.exit_count
response_count = ndb.ComputedProperty(lambda self: self._get_total_count)
当我创建这个 class 的实例并保存它时
stat = Stat(visit_count=0, exit_count=2)
stat.put()
我得到这个异常:
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 1207, in _value_to_repr
return repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 3013, in __repr__
rep = prop._value_to_repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 1207, in _value_to_repr
return repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 3013, in __repr__
rep = prop._value_to_repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 1207, in _value_to_repr
return repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 3013, in __repr__
rep = prop._value_to_repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 1207, in _value_to_repr
return repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 3013, in __repr__
rep = prop._value_to_repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/model.py", line 1207, in _value_to_repr
return repr(val)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/key.py", line 357, in __repr__
if self.app() != _DefaultAppId():
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/ndb/key.py", line 824, in _DefaultAppId
return os.getenv('APPLICATION_ID', '_')
File "/Users/antkong/dev/zeetings/zeetings-ve/bin/../lib/python2.7/os.py", line 515, in getenv
return environ.get(key, default)
File "/Users/antkong/dev/zeetings/zeetings-ve/bin/../lib/python2.7/UserDict.py", line 58, in get
def get(self, key, failobj=None):
RuntimeError: maximum recursion depth exceeded
如果我删除计算 属性,put
可以毫无问题地执行。
我该如何解决这个问题?
response_count = ndb.ComputedProperty(lambda self: self._get_total_count)
意味着您为 ComputedProperty
返回的值是 函数 self._get_total_count
- 您没有调用它。
response_count = ndb.ComputedProperty(lambda self: self._get_total_count())