Ciągle pojawia się komunikat o błędzie
AttributeError: 'NoneType' object has no attribute 'something'
Kod, który mam, jest za długi, aby opublikować tutaj. Jakie spowodowałyby to ogólne scenariusze AttributeError
, co to NoneType
znaczy i jak mogę zawęzić to, co się dzieje?
python
attributeerror
nonetype
Jacob Griffin
źródło
źródło
print
funkcje (lub instrukcje w zależności od wersji), aby ujawnić rzeczywiste wartości zmiennych w kodzie, który ma ten problem.None
.Odpowiedzi:
NoneType oznacza, że zamiast wystąpienia jakiejkolwiek klasy lub obiektu, z którym myślisz, że pracujesz, faktycznie masz
None
. Zazwyczaj oznacza to, że przywołanie lub wywołanie funkcji powyżej nie powiodło się lub zwróciło nieoczekiwany wynik.źródło
Masz zmienną, która jest równa None i próbujesz uzyskać dostęp do jej atrybutu zwanego „czymś”.
lub
Oba dadzą
AttributeError: 'NoneType'
źródło
None
coś z tego wyciągnąć. Jestfoo = None
mało prawdopodobne, aby wyraźny był problem; tak się staniefoo = something()
i nie zdajesz sobie sprawy,something()
że może powrócić,None
gdy się nie powiedzie lub zestaw wyników będzie pusty lub cokolwiek.Inni wyjaśnili, co to
NoneType
jest i powszechny sposób, aby z tym skończyć (tj. Nie zwrócić wartości z funkcji).Innym częstym powodem, dla
None
którego nie spodziewasz się, jest przypisanie operacji na miejscu na obiekcie zmiennym. Na przykład:sort()
Metoda listy sortuje listy na miejscu, to znaczymylist
jest modyfikowany. Ale rzeczywista wartość zwracana przez metodęNone
nie jest sortowana na liście. Więc po prostu przypisanyNone
domylist
. Jeśli spróbujesz to zrobić, powiedzmy,mylist.append(1)
Python wyświetli ten błąd.źródło
Jest
NoneType
to typ wartościNone
. W tym przypadku zmiennalifetime
ma wartośćNone
.Częstym sposobem, aby tak się stało, jest wywołanie funkcji, w której brakuje a
return
.Istnieje jednak nieskończona liczba innych sposobów ustawienia zmiennej na Brak.
źródło
lifetime
miał wartośćNone
(pre-edit). Próbował uzyskać dostęp do atrybutu „ lifetime ” czegoś innegoNone
.Rozważ poniższy kod.
To da ci błąd
Więc punkty są jak poniżej.
źródło
Oznacza obiekt, do którego próbujesz uzyskać dostęp
None
.None
jestNull
zmienną w pythonie. Ten rodzaj błędu występuje w twoim kodzie jest mniej więcej taki.źródło
gddc ma rację, ale dodaje bardzo częsty przykład:
Możesz wywołać tę funkcję w formie rekurencyjnej. W takim przypadku możesz skończyć na zerowym wskaźniku lub
NoneType
. W takim przypadku możesz otrzymać ten błąd. Dlatego przed uzyskaniem dostępu do atrybutu tego parametru sprawdź, czy tak nie jestNoneType
.źródło
if foo is not None:
Podczas budowania estymatora (sklearn), jeśli zapomnisz zwrócić siebie w funkcji dopasowania, pojawi się ten sam błąd.
Dodanie
return self
do funkcji dopasowania naprawia błąd.źródło
Ten błąd można uzyskać, skomentując kod HTML w aplikacji Flask. Tutaj wartość parametru Qual.date_expiry wynosi None:
Usuń linię lub napraw ją:
źródło
jeśli przypiszemy coś takiego jak poniżej, zwróci błąd jako „AttributeError: Obiekt„ NoneType ”nie ma atrybutu„ show ””
źródło