所以我有这段代码:
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'])
最佳答案
好吧,我犯了愚蠢的错误,尽管由于追溯,该错误使我感到困惑。所以我看错了方向。
问题出在另一种方法中,该方法用于更新对象字典。如果在配置中指定了某些当前迭代项(来自迭代),则其目的是更新特定键的值。
无论如何,问题是这样的(在另一个称为_set_dynamic_rows_data
的方法中):
objects = self._update_objects_dict(
val_cfg, objects, iter_)
我不小心将
objects
字典分配给此方法,并且由于此方法不返回任何内容,因此objects
字典将设置为None
。并用该错误掩盖了该错误,因为第一次迭代就可以了,而在第二次迭代期间,当objects
dict更改时,它就会像所描述的那样开始失败。关于python - Python:NoneType对象没有属性__getitem__。但是它不是nonetype,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39830681/