AttributeError:“ contactObject”对象没有属性

时间:2018-11-21 13:08:01

标签: python attributeerror suds

这是我的功能:

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"]是否存在的原因。它是否处理它,如果不忽略它。

为什么这种情况失败了?

2 个答案:

答案 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")