【问题标题】:Python: NoneType object has no attribute __getitem__. But its not nonetypePython:NoneType 对象没有属性 __getitem__。但它不是无类型
【发布时间】: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_attrhandle_method)来找到解决方案,这对我来说似乎是不够的,但看起来在某些时候 None 是作为objects 传递到_handle_method 方法中,这会导致此错误。最好的方法就是运行调试。

标签: python python-2.7 dictionary nonetype


【解决方案1】:

好吧,我犯了愚蠢的错误,尽管由于回溯,该错误使我感到困惑。所以我看错了方向。

问题出在另一种方法上,即用于更新对象字典。它的目的是更新特定键的值,如果在配置中指定需要分配某些当前迭代项(来自迭代)。

无论如何,问题是这样的(在另一个称为_set_dynamic_rows_data 的方法中):

objects = self._update_objects_dict(
                        val_cfg, objects, iter_)

我不小心将objects dict 分配给了这个方法,因为这个方法没有返回任何东西,objects dict 将被设置为None。它被这个错误掩盖了,因为第一次迭代,一切都会好起来的,而在第二次迭代中,当objects dict 被更改时,它就会开始像问题描述的那样失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-12
    • 2013-03-17
    • 2015-10-26
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2012-10-15
    相关资源
    最近更新 更多