447 Stimmen

Warum erhalte ich AttributeError: 'NoneType' Objekt hat kein Attribut 'something'?

Ich erhalte eine Fehlermeldung, die besagt

AttributeError: 'NoneType' Objekt hat kein Attribut 'something'

Wie kann ich diese Nachricht verstehen?

Welche allgemeinen Szenarien könnten einen solchen AttributeError verursachen, und wie kann ich das Problem identifizieren?


Dies ist ein spezieller Fall von <code>AttributeError</code>. Er verdient eine separate Behandlung, weil es viele Möglichkeiten gibt, einen unerwarteten <code>None</code> Wert aus dem Code zu erhalten, sodass es typischerweise ein anderes Problem ist; bei anderen <code>AttributeError</code>s könnte das Problem genauso gut der Attributname sein.

Siehe auch <a href="https://stackoverflow.com/questions/19473185">Was ist ein None-Wert?</a> und <a href="https://stackoverflow.com/questions/21095654">Was ist ein 'NoneType' Objekt?</a> für ein Verständnis von <code>None</code> und seinem Typ, <code>NoneType</code>.

2 Stimmen

TODO: Einen geeigneten Canon für den allgemeinen Fall von AttributFehler finden, um ihn im siehe auch Abschnitt zu einbeziehen. stackoverflow.com/questions/11685936 ist nicht geeignet, da er durch einen Tippfehler (gemischte Tabulatoren/Leerzeichen-Einzüge) verursacht wurde, der 2.x-spezifische Auswirkungen hat und dadurch Verwirrung und Ungenauigkeiten in den Antworten verursacht.

432voto

g.d.d.c Punkte 44201

NoneType bedeutet, dass anstelle einer Instanz der Klasse oder des Objekts, mit dem Sie zu arbeiten denken, tatsächlich None vorhanden ist. Das bedeutet in der Regel, dass eine Zuweisung oder Funktionsaufruf weiter oben fehlgeschlagen ist oder ein unerwartetes Ergebnis zurückgegeben hat.

137voto

koblas Punkte 23237

Sie haben eine Variable, die gleich None ist, und versuchen, auf ein Attribut namens 'something' zuzugreifen.

foo = None
foo.something = 1

oder

foo = None
print(foo.something)

Beides wird einen AttributeError: 'NoneType' erzeugen

65voto

kindall Punkte 167554

Andere haben erklärt, was NoneType ist und eine häufige Möglichkeit, wie man darauf stoßen kann (d.h., Versäumnis, einen Wert aus einer Funktion zurückzugeben).

Ein weiterer häufiger Grund, warum Sie None haben, wo Sie es nicht erwarten, ist die Zuweisung einer In-Place-Operation an ein veränderliches Objekt. Zum Beispiel:

mylist = mylist.sort()

Die Methode sort() einer Liste sortiert die Liste vor Ort, d.h., mylist wird verändert. Aber der tatsächliche Rückgabewert der Methode ist None und nicht die sortierte Liste. Also haben Sie gerade None an mylist zugewiesen. Wenn Sie als nächstes versuchen, z.B. mylist.append(1) durchzuführen, wird Ihnen Python diesen Fehler geben.

17voto

S.Lott Punkte 371691

Der NoneType ist der Typ des Wertes None. In diesem Fall hat die Variable lifetime einen Wert von None.

Ein häufiger Grund dafür ist das Aufrufen einer Funktion ohne return.

Es gibt jedoch unendlich viele andere Möglichkeiten, eine Variable auf None zu setzen.

15voto

PHINCY L PIOUS Punkte 335

Betrachten Sie den folgenden Code.

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

y = return_something(2)
y.real()

Dies wird Ihnen den Fehler geben

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

Also sind die Punkte wie folgt:

  1. Im Code gibt eine Funktion oder eine Klassenmethode entweder nichts zurück oder gibt das None zurück
  2. Dann versuchen Sie, auf ein Attribut dieses zurückgegebenen Objekts zuzugreifen (das None ist), was die Fehlermeldung verursacht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X