Почему я получаю AttributeError: у объекта 'NoneType' нет атрибута 'что-то'? - PullRequest
236 голосов
/ 21 января 2012

Я получаю сообщение об ошибке

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

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

Ответы [ 7 ]

237 голосов
/ 21 января 2012

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

92 голосов
/ 21 января 2012

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

foo = None
foo.something = 1

или

foo = None
print foo.something

Оба приведут к AttributeError: 'NoneType'

41 голосов
/ 21 января 2012

Другие объяснили, что такое NoneType и как его можно использовать (т. Е. Не удалось вернуть значение из функции).

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

mylist = mylist.sort()

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

16 голосов
/ 21 января 2012

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

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

Однако существует множество других способов установить для переменной значение None.

12 голосов
/ 10 апреля 2017

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

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

y = return_something(2)
y.real()

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

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

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

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

Это означает, что объект, к которому вы пытаетесь получить доступ 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")
0 голосов
/ 19 февраля 2019

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

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

...