这是我的功能:
def get_content(self):
full_results = []
for res in self._get_data(): #function that returns suds object
final_dict = dict(res)
final_dict.pop('readOnlyContactData', None)
if res["readOnlyContactData"] is not None:
readOnlyContactData_dict = dict(res["readOnlyContactData"])
final_dict.update(readOnlyContactData_dict)
full_results.append(final_dict)
return full_results
但是运行时我得到:
INFO - if res["readOnlyContactData"] is not None:
INFO - File "/home/ubuntu/.local/lib/python3.6/site-packages/suds/sudsobject.py", line 154, in __getitem__
INFO - return getattr(self, name)
INFO - AttributeError: 'contactObject' object has no attribute 'readOnlyContactData'
INFO - Command exited with return code 1
我不明白为什么if条件应该检查res["readOnlyContactData"]
是否存在的原因。它是否处理它,如果不忽略它。
为什么这种情况失败了?
答案 0 :(得分:2)
在python中,使用variable['key']
语法在内部调用__getitem__('key')
以检索正确的元素。对于您而言,该错误表明__getitem__()
内部调用getattr()
,该调用通常用于检索类成员或实例变量。
File "/path/to/sudsobject.py", line 154, in __getitem__
return getattr(self, name)
AttributeError: 'contactObject' object has no attribute 'readOnlyContactData'
因此,根据您提供的信息,呼叫res["readOnlyContactData"]
似乎等同于呼叫res.readOnlyContactData
。由于在对象(类型为readOnlyContactData
的对象中找不到contactObject
属性,因此会出现此错误。
尝试以下语句检查对象是否具有您要查找的成员:
>>> # this has to be implemented in your class
>>> "readOnlyContactData" in res
或
>>> hasattr(res, "readOnlyContactData")
答案 1 :(得分:1)
如果条件检查res["readOnlyContactData"]
中的元素是否为None
。因此,如果res
没有名为"readOnlyContactData"
的索引,Python将返回异常Object has no attribute
。代替if语句,您应该尝试hasattr(res, "readOnlyContactData")