Ich habe eine Methode, die manchmal einen NoneType-Wert zurückgibt. Wie kann ich eine Variable in Frage stellen, die kein Typ ist? Ich muss zum Beispiel die if- Methode verwenden
if not new:
new = '#'
Ich weiß, dass das der falsche Weg ist und ich hoffe, Sie verstehen, was ich meinte.
None
ist die einzige Ihre Methode zurückgibt Wert , für denbool(returnValue)
gleichFalse
, dannif not new:
sollte gut funktionieren. Dies tritt manchmal in den integrierten Bibliotheken auf - gibt beispielsweisere.match
entweder None oder ein wahrheitsgemäßes Übereinstimmungsobjekt zurück.null
undNone
in Python hier .Antworten:
Verwenden Sie den
is
Operator wie folgtWarum funktioniert das?
Da dies
None
das einzige Singleton-ObjektNoneType
in Python ist, können wir mit demis
Operator prüfen, ob eine Variable darin enthalten istNone
oder nicht.Zitieren aus
is
Dokumenten ,Da es nur eine Instanz von geben kann
None
,is
wäre dies die bevorzugte Methode zur ÜberprüfungNone
.Hören Sie es aus dem Maul des Pferdes
Zitieren von Pythons Coding Style Guidelines - PEP-008 (gemeinsam von Guido selbst definiert),
quelle
== None
undis None
?None
werden beide ähnliche Ergebnisse liefern.pandas
DataFrame vorhanden ist. Dazutype(df) is type(None)
vermeide ichThe truth value of a DataFrame is ambiguous
quelle
Dies kann auch
isinstance
gemäß der Antwort von Alex Hall erfolgen :isinstance
ist auch intuitiv, aber es gibt die Komplikation, dass es die Leitung erfordertNoneType = type(None)
was für Typen wie
int
und nicht benötigt wirdfloat
.quelle
NoneType
und daNone
es sich um ein Singleton handelt,isinstance
sollte es nicht zum Erkennen verwendet werdenNone
- stattdessen sollten Sie tun, was in der akzeptierten Antwort steht, undis None
oder verwendenis not None
.Wie in Aaron Halls Kommentar hervorgehoben:
Ursprüngliche Antwort:
Der einfachste Weg jedoch ohne die zusätzliche Zeile zusätzlich zu Kardamoms Antwort ist wahrscheinlich:
isinstance(x, type(None))
Für die Verwendung
isinstance()
ist keine Anweisungis
innerhalb derif
Anweisung erforderlich :Zusätzliche Informationen
Sie können auch in einer
isinstance()
Anweisung nach mehreren Typen suchen, wie in der Dokumentation erwähnt . Schreiben Sie die Typen einfach als Tupel.quelle
NoneType
und daNone
es sich um ein Singleton handelt,isinstance
sollte es nicht zum Erkennen verwendet werdenNone
- stattdessen sollten Sie tun, was in der akzeptierten Antwort steht, undis None
oder verwendenis not None
.python 3.6.7
isinstance
sollte nicht verwendet werden? Ich verstehe, dassis
dies bevorzugt werden sollte, aber es gibt einige Fälle, in denen sich das isinstance-Formular natürlicher anfühlt (wie das gleichzeitige Überprüfen auf mehrere Typenisinstance(x, (str, bool, int, type(None)))
). Ist es nur eine persönliche Präferenz oder gibt es eine Einschränkung, die mir nicht bekannt ist?type
2. dann Aufrufen 3. Nachschlagen des Typs vonNone
- WannNone
ist sowohl ein Singleton als auch ein Schlüsselwort. Ein weiterer Nachteil: 4. Dies ist sehr ungewöhnlich und zieht die Augenbrauen hoch, wenn Leute auf Ihren Code schauen.x is None
ist eine optimierte Prüfung. Ich würde vorschlagenx is None or isinstance(x, (str, bool, int))
- aber ich würde auch vorschlagen, dass Sie mehr darüber nachdenken, was Sie tun, wenn Sie diese Art der Typprüfung auf Typen durchführen, die nicht viel gemeinsam haben ...Ich bin mir nicht sicher, ob dies die Frage beantwortet. Aber ich weiß, dass ich eine Weile gebraucht habe, um das herauszufinden. Ich habe eine Website durchlaufen und plötzlich war der Name der Autoren nicht mehr da. Also brauchte ich eine Check-Anweisung.
Der Autor kann in diesem Fall eine beliebige Variable sein und
None
ein beliebiger Typ, nach dem Sie suchen.quelle
None
es sich um ein Singleton handelt,type
sollte es nicht zum Erkennen verwendet werdenNone
- stattdessen sollten Sie tun, was in der akzeptierten Antwort steht, undis None
oder verwendenis not None
.Python 2.7:
oder
==> Richtig
quelle
NoneType
und daNone
es sich um ein Singleton handelt,isinstance
sollte es nicht zum Erkennen verwendet werdenNone
- stattdessen sollten Sie tun, was in der akzeptierten Antwort steht, undis None
oder verwendenis not None
.Ich hoffe, dieses Beispiel ist hilfreich für Sie.)
Sie können also den Typ des Variablennamens überprüfen
quelle