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.

-1voto

David Newcomb Punkte 10288

Keine der anderen Antworten hier hat mir die richtige Lösung gegeben. Ich hatte dieses Szenario:

def my_method():
   if condition == 'whatever':
      ....
      return 'something'
   else:
      return None

answer = my_method()

if answer == None:
   print('Empty')
else:
   print('Not empty')

Das führte zu folgendem Fehler:

File "/usr/local/lib/python3.9/site-packages/gitlab/base.py", line 105, in __eq__
if self.get_id() and other.get_id():
AttributeError: 'NoneType' object has no attribute 'get_id'

In diesem Fall können Sie die Gleichheit nicht mit == auf None prüfen. Um es zu beheben, habe ich es geändert, um stattdessen is zu verwenden:

if answer is None:
   print('Empty')
else:
   print('Not empty')

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