HOWTO · Python
Prüfen, ob eine Variable in Python `None` ist
So prüfen Sie, ob eine Python-Variable den Wert None enthält, und wann sich andere Ansätze eignen.
Auf dieser Seite
Der Python-Wert None steht für das Fehlen eines Werts. Er ist von 0, False und einer leeren Zeichenkette verschieden. Um zu prüfen, ob eine Variable None enthält, verwenden Sie value is None; für die umgekehrte Bedingung eignet sich value is not None.
Verwenden Sie den Operator is, um in Python zu prüfen, ob eine Variable None ist
None ist ein Singleton, es gibt also genau ein None-Objekt. Der Operator is prüft, ob zwei Referenzen auf dasselbe Objekt zeigen. Deshalb ist er die empfohlene direkte Prüfung. Das Beispiel zeigt beide Bedingungen:
value = None
if value is None:
print("The value is None")
else:
print("The value is not None")
if value is not None:
print("A value is present")
else:
print("No value is present")
The value is None
No value is present
Verwenden Sie die zweite Form, wenn der Code nur fortfahren soll, sofern ein Wert vorhanden ist, etwa bevor Sie eine Methode darauf aufrufen. Der Identitätsvergleich verhindert außerdem, dass ein anderes Objekt allein wegen seines falschen Wahrheitswerts wie None behandelt wird.
Verwenden Sie die Funktion isinstance(), um in Python zu prüfen, ob eine Variable None ist
isinstance() prüft, ob ein Objekt zu einem bestimmten Typ gehört, und gibt einen booleschen Wert zurück. Da type(None) dem Typ NoneType entspricht, prüft dieser Ausdruck, ob value diesen Typ hat:
value = None
print(isinstance(value, type(None)))
True
Diese Variante ist sinnvoll, wenn ausdrücklich eine Typprüfung gebraucht wird. Für eine direkte Prüfung auf None ist value is None einfacher und drückt den beabsichtigten Identitätsvergleich unmittelbar aus.
Verwenden Sie ein Dictionary, um in Python zu prüfen, ob eine Variable None ist
Ein Dictionary kann None als Schlüssel verwenden. So lässt sich dieser Schlüssel in einer bestimmten Zuordnung finden. Das ist ein eng begrenztes Beispiel für einen Nachschlagevorgang und keine allgemeine Methode, beliebige Variablen zu untersuchen:
value = None
messages = {None: "The value is None"}
if value in messages:
print(messages[value])
else:
print("No matching key")
The value is None
Die Bedingung prüft, ob value einem Schlüssel in messages entspricht. Dass sie hier anzeigt, dass der Wert None ist, liegt nur daran, dass dieses Dictionary None enthält und im Beispiel dafür verwendet wird. Für eine normale Variablenprüfung verwenden Sie stattdessen is None.
Verwenden Sie den try- und except-Block, um in Python auf Fehler im Zusammenhang mit None zu reagieren
Die Ausnahmebehandlung ist hilfreich, wenn eine Operation mit einem Wert wie None fehlschlagen kann; sie prüft die Variable nicht direkt. Beispielsweise löst die Addition von None und einer Ganzzahl einen TypeError aus. Fangen Sie gezielt den erwarteten Fehler ab. Ein bloßes except könnte auch ein unabhängiges Problem verbergen. Weitere Informationen finden Sie im Leitfaden zu try/except in Python.
value = None
try:
result = value + 5
except TypeError:
print("This operation needs a numeric value")
This operation needs a numeric value
Dieses Muster reagiert auf eine fehlgeschlagene Addition. Wenn Ihre Logik feststellen muss, ob die Variable None ist, prüfen Sie das ausdrücklich, bevor Sie die Operation ausführen.
Verwenden Sie den Gleichheitsoperator (==), um in Python zu prüfen, ob eine Variable None ist
value == None vergleicht Werte und ergibt für None den Wert True. Die Gleichheitsmethode eines Objekts kann jedoch ein eigenes Vergleichsverhalten festlegen. Deshalb ist Gleichheit nicht die eindeutigste Möglichkeit, das Singleton None zu erkennen. Übliche Werte wie 0, False, "" und [] sind nicht gleich None; ein falscher Wahrheitswert macht sie nicht zu None. Verwenden Sie für diese Prüfung vorzugsweise value is None.
Fazit
Verwenden Sie value is None, um direkt zu prüfen, ob eine Python-Variable None enthält, und value is not None für die umgekehrte Bedingung. isinstance(value, type(None)) ist eine mögliche Typprüfung; die Dictionary-Mitgliedschaft gilt nur für eine bestimmte Zuordnung, und try/except dient dazu, einen erwarteten Fehler bei einer Operation zu behandeln. Mit diesen Unterscheidungen können Sie den passenden Ansatz für Ihren Code wählen.