AttributeError: у объекта 'contactObject' нет атрибута - PullRequest
0 голосов
/ 21 ноября 2018

Это моя функция:

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 голосов
/ 21 ноября 2018

То, что если условие проверяет, является ли элемент, расположенный в res["readOnlyContactData"], None или нет.Таким образом, если res не имеет индекса с именем "readOnlyContactData", Python возвращает исключение Object has no attribute.Вместо оператора if вы должны попробовать hasattr(res, "readOnlyContactData")

0 голосов
/ 21 ноября 2018

В 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")
...