1
所以我有這樣一段代碼:Python:NoneType對象沒有屬性__getitem__。但它不是nonetype
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
@ Nf4r確定,只需一秒鐘。奇怪的是,它適用於所有其他單位測試。現在我正在編寫另一個單元測試,這恰好也調用了這個方法,並且以這種奇怪的方式失敗。 – Andrius
好吧,看起來對於我來說,如果沒有看到代碼的其餘部分('get_attr'和'handle_method')來找到解決方案,這似乎還不夠,但它看起來像是在某個時候None被作爲「對象」到導致這個錯誤的'_handle_method'方法中。最好的方法就是運行調試。 – Nf4r