Python: ошибка атрибута – объект «NoneType» не имеет атрибута «что-то»,

Я продолжаю получать сообщение об ошибке

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

Код, который у меня есть, слишком длинный, чтобы публиковать здесь, но мне было интересно, может ли кто-нибудь объяснить суть общих сценариев для этого «AttributeError» и что означает «NoneType» ? (Обычно вы получили бы название какого-либо объекта, где код поступил не так, но поскольку он дает мне «NoneType», я не уверен, как можно сузить то, что происходит, кроме строки #)

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

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

 foo = None foo.something = 1 

или

 foo = None print foo.something 

Оба получат AttributeError: 'NoneType'

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

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

 mylist = mylist.sort() 

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

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

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

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

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

 def return_something(someint): if someint > 5: return someint y = return_something(2) y.real() 

Это даст вам ошибку

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

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

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