【发布时间】:2016-10-03 11:37:44
【问题描述】:
所以我有这段代码:
key = val_cfg['src_model']
print "key: ", key
print "objects dict: ", objects
print "before Nonetype"
print "accessing objects dict: ", objects[key] # line 122
print "after"
method = self._handle_object(
val_cfg, objects[val_cfg['src_model']])
所以我得到的输出是这样的:
key: ir.model.data
objects dict: {'res.partner': res.partner(22,), 'ir.model.data': ir.model.data()}
before Nonetype
accessing objects dict: ir.model.data()
after
然后我得到错误:
_report.tests.test_vat_report: ` File "/home/user/addons/account_vat_report/models/vat_report.py", line 122, in _handle_method
2016-10-03 11:32:44,863 31650 ERROR vat_reports openerp.addons.account_vat_report.tests.test_vat_report: ` print "accessing objects dict: ", objects[key]
2016-10-03 11:32:44,863 31650 ERROR vat_reports openerp.addons.account_vat_report.tests.test_vat_report: ` TypeError: 'NoneType' object has no attribute '__getitem__'
这没有意义。我打印第 122 行的结果,但测试失败,说它的 NoneType 对象。怎么会这样?我可能在这里遗漏了一些东西。有人看到这里有什么问题吗?
更新。
_handle_object的定义:
@api.model
def _handle_object(self, val_cfg, obj):
"""Method to get value from object."""
# check if value is list or tuple of strings.
if not isinstance(val_cfg['value'], basestring):
for val in val_cfg['value']:
value = self._get_attribute(obj, val_cfg['value'])
# return first value that was retrieved.
if value:
return value
# if we do not get any "True" value, just return last
# one.
else:
return value
else:
return self._get_attribute(obj, val_cfg['value'])
【问题讨论】:
-
你能显示你的
self._handle_object方法的定义吗?至少参数 -
@Nf4r 当然,等一下。奇怪的是,它是否适用于所有其他单元测试。现在我实际上正在编写另一个单元测试,它恰好也调用了这个方法,它以这种奇怪的方式失败了。
-
好吧,如果没有看到其余代码(
get_attr和handle_method)来找到解决方案,这对我来说似乎是不够的,但看起来在某些时候 None 是作为objects传递到_handle_method方法中,这会导致此错误。最好的方法就是运行调试。
标签: python python-2.7 dictionary nonetype