Почему я получаю AttributeError: у объекта 'NoneType' нет атрибута 'что-то'?

Я получаю ошибку, которая говорит

AttributeError: 'NoneType' object has no attribute 'something'

Код, который у меня есть, слишком длинный, чтобы публиковать здесь. Какие общие сценарии могут вызвать эту AttributeError, что должен означать NoneType и как я могу сузить то, что происходит?

Ответ 1

NoneType означает, что вместо экземпляра любого класса или объекта, с которым вы работаете, вы действительно получили None. Это обычно означает, что вызов вызова или функции выше не выполнен или возвращает неожиданный результат.

Ответ 2

У вас есть переменная, которая равна None, и вы пытаетесь получить доступ к атрибуту, который он назвал "чем-то".

foo = None
foo.something = 1

или

foo = None
print foo.something

Оба будут давать AttributeError: 'NoneType'

Ответ 3

Другие объяснили, что такое NoneType и общий способ его завершения (т.е. отказ вернуть значение из функции).

Еще одна распространенная причина, по которой у вас есть None, где вы не ожидаете, что это назначение операции на месте изменяемого объекта. Например:

mylist = mylist.sort()

Метод sort() списка сортирует список на месте, т.е. изменяется mylist. Но фактическое возвращаемое значение метода None, а не отсортированный список. Итак, вы только что назначили None на mylist. Если вы попытаетесь сделать следующее, скажем, mylist.append(1) Python даст вам эту ошибку.

Ответ 4

NoneType - тип значения None. В этом случае переменная lifetime имеет значение None.

Общим способом для этого является вызов функции без return.

Существует множество других способов установить переменную в None.

Ответ 5

Рассмотрим приведенный ниже код.

def return_something(someint):
 if  someint > 5:
    return someint

y = return_something(2)
y.real()

Это приведет к ошибке

AttributeError: объект "NoneType" не имеет атрибута "real"

Итак, точки такие, как показано ниже.

  • В коде функция или метод класса ничего не возвращает или возвращает None
  • Затем вы пытаетесь получить доступ к атрибуту этого возвращенного объекта (который является None), вызывая сообщение об ошибке.

Ответ 6

Это означает, что объект, к которому вы пытаетесь получить доступ, None. None является Null переменной в python. Этот тип ошибки происходит, потому что ваш код выглядит примерно так.

x1 = None
print(x1.something)

#or

x1 = None
x1.someother = "Hellow world"

#or
x1 = None
x1.some_func()

# you can avoid some of these error by adding this kind of check
if(x1 is not None):
    ... Do something here
else:
    print("X1 variable is Null or None")

Ответ 7

gddc прав, но добавляя очень частый пример:

Вы можете вызвать эту функцию в рекурсивной форме. В этом случае вы можете получить нулевой указатель или NoneType. В этом случае вы можете получить эту ошибку. Поэтому, прежде чем получить доступ к атрибуту этого параметра, проверьте, не NoneType ли он NoneType.