所以我有这段代码:

    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/

10-12 19:26