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.

6voto

Shah Vipul Punkte 396
if val is not None:
    print(val)
else:
    # keine Notwendigkeit für else: wirklich, wenn es nichts Nützliches enthält
    pass

Überprüfen Sie, ob bestimmte Daten nicht leer oder null sind.

4voto

M. Hamza Rajput Punkte 5219

Es bedeutet, dass das Objekt, auf das Sie zugreifen möchten, None ist. None ist eine Null-Variable in Python. Dieser Fehler tritt auf, weil Ihr Code so aussieht.

x1 = None
print(x1.something)

#oder

x1 = None
x1.someother = "Hallo Welt"

#oder
x1 = None
x1.some_func()

# Sie können einige dieser Fehler vermeiden, indem Sie diese Art von Überprüfung hinzufügen
if(x1 is not None):
    ... Hier etwas machen
else:
    print("X1-Variable ist Null oder None")

3voto

Chiel Punkte 1398

Beim Erstellen eines Schätzers (sklearn), wenn Sie vergessen, in der Anpassungsfunktion self zurückzugeben, erhalten Sie denselben Fehler.

class ImputeLags(BaseEstimator, TransformerMixin):
    def __init__(self, columns):
        self.columns = columns

    def fit(self, x, y=None):
        """ etwas machen """
        return self

    def transfrom(self, x):
        return x

AttributeError: 'NoneType' Objekt hat kein Attribut 'transform'?

Das Hinzufügen von return self zur fit Funktion behebt den Fehler.

1voto

barribow Punkte 89

G.d.d.c. hat recht, aber fügt ein sehr häufiges Beispiel hinzu:

Sie könnten diese Funktion in einer rekursiven Form aufrufen. In diesem Fall könnten Sie am Nullzeiger oder NoneType landen. In diesem Fall könnten Sie diesen Fehler erhalten. Bevor Sie also auf ein Attribut dieses Parameters zugreifen, überprüfen Sie, ob es nicht NoneType ist.

0voto

Jeremy Thompson Punkte 56282

Sie können diesen Fehler erhalten, wenn Sie HTML in einer Flask-Anwendung auskommentiert haben. Hier ist der Wert für qual.date_expiry None:

Löschen Sie die Zeile oder beheben Sie sie:

{% if qual.date_attained != None %} {{ qual.date_attained.date() }} {% endif %}

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