695 Stimmen

Wie testet man den NoneType in Python?

Ich habe eine Methode, die manchmal einen Wert vom Typ NoneType zurückgibt. Wie kann ich also eine Variable abfragen, die vom Typ NoneType ist? Ich muss die if-Methode verwenden, zum Beispiel

if not new:
    new = '#'

Ich weiß, dass das der falsche Weg ist und ich hoffe, du verstehst, was ich meine.

1015voto

thefourtheye Punkte 219812

Also wie kann ich eine Variable, die einen NoneType ist, überprüfen?

Verwenden Sie den is Operator, wie folgt

if variable is None:

Warum funktioniert das?

Da None das einzige Singleton-Objekt des NoneType in Python ist, können wir den is Operator nutzen, um zu überprüfen, ob eine Variable None enthält oder nicht.

Wie die is Dokumentation sagt,

Die Operatoren is und is not testen die Objektidentität: x is y ist wahr, wenn und nur wenn x und y dasselbe Objekt sind. x is not y ergibt den umgekehrten Wahrheitswert.

Da es nur eine Instanz von None geben kann, ist is der bevorzugte Weg, um None zu überprüfen.


Höre es aus Mund des Pferdes

Laut Python's Richtlinien für den Programmierstil - PEP-008 (gemeinsam von Guido selbst definiert),

Vergleiche mit Singletons wie None sollten immer mit is oder is not, niemals mit den Gleichheitsoperatoren durchgeführt werden.

141voto

elhoucine Punkte 2376
if variable ist None:
   ...

if variable ist nicht None:
   ...

74voto

cardamom Punkte 5987

Es kann auch mit isinstance gemacht werden, wie in Alex Halls Antwort zu sehen ist:

>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True

isinstance ist auch intuitiv, aber es gibt die Komplikation, dass die Zeile benötigt wird

NoneType = type(None)

die für Typen wie int und float nicht erforderlich ist.

37voto

Martin Müsli Punkte 1049

Wie Aaron Hall in seinem Kommentar erwähnt hat:

Da Sie NoneType nicht unterklassifizieren können und da None ein Singleton ist, sollte isinstance nicht verwendet werden, um None zu erkennen - stattdessen sollten Sie, wie die akzeptierte Antwort sagt, is None oder is not None verwenden.


Ursprüngliche Antwort:

Der einfachste Weg ist jedoch, ohne die zusätzliche Zeile zusätzlich zu cardamoms Antwort ist vermutlich:
isinstance(x, type(None))

Wie kann ich also eine Variable in Frage stellen, die ein NoneType ist? Ich muss die if-Methode verwenden

Die Verwendung von isinstance() erfordert kein is innerhalb der if-Anweisung:

if isinstance(x, type(None)): 
    #do stuff

Zusätzliche Informationen
Sie können auch nach mehreren Typen in einer isinstance()-Anweisung suchen, wie in der Dokumentation erwähnt. Geben Sie einfach die Typen als Tuple an.

isinstance(x, (type(None), bytes))

19voto

Joshua Pachner Punkte 199

Nicht sicher, ob das die Frage beantwortet. Aber ich weiß, dass es mir eine Weile gedauert hat, das herauszufinden. Ich habe eine Website durchlaufen und plötzlich war der Name der Autoren nicht mehr da. Also brauchte ich eine Überprüfung.

if type(author) == type(None):
     print("mein if-Körper")
else:
     print("mein else-Körper")

Der Autor kann in diesem Fall jede Variable sein, und None kann jeder Typ sein, den Sie überprüfen.

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