Ответ 1
NoneType означает, что вместо экземпляра любого класса или объекта, с которым вы работаете, вы действительно получили None
. Это обычно означает, что вызов вызова или функции выше не выполнен или возвращает неожиданный результат.
Я получаю ошибку, которая говорит
AttributeError: 'NoneType' object has no attribute 'something'
Код, который у меня есть, слишком длинный, чтобы публиковать здесь. Какие общие сценарии могут вызвать эту AttributeError
, что должен означать NoneType
и как я могу сузить то, что происходит?
NoneType означает, что вместо экземпляра любого класса или объекта, с которым вы работаете, вы действительно получили None
. Это обычно означает, что вызов вызова или функции выше не выполнен или возвращает неожиданный результат.
У вас есть переменная, которая равна None, и вы пытаетесь получить доступ к атрибуту, который он назвал "чем-то".
foo = None
foo.something = 1
или
foo = None
print foo.something
Оба будут давать AttributeError: 'NoneType'
Другие объяснили, что такое NoneType
и общий способ его завершения (т.е. отказ вернуть значение из функции).
Еще одна распространенная причина, по которой у вас есть None
, где вы не ожидаете, что это назначение операции на месте изменяемого объекта. Например:
mylist = mylist.sort()
Метод sort()
списка сортирует список на месте, т.е. изменяется 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"
Итак, точки такие, как показано ниже.
Это означает, что объект, к которому вы пытаетесь получить доступ, 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")
gddc прав, но добавляя очень частый пример:
Вы можете вызвать эту функцию в рекурсивной форме. В этом случае вы можете получить нулевой указатель или NoneType
. В этом случае вы можете получить эту ошибку. Поэтому, прежде чем получить доступ к атрибуту этого параметра, проверьте, не NoneType
ли он NoneType
.