2017-11-22 8 views
0

Die commom Art und Weise zu testen Variable für NoneType prüft zu vergleichen, wenn sie auf None Singletone Bezug ist:Der richtige Weg, eine Variable mit None

test_var is None 

Dieser Ansatz wird als der einzige Weg empfohlen zu prüfen, für None nach zu PEP-8:

Vergleiche zu Singletons wie None immer getan werden sollte, mit oder ist nicht, niemals die Gleichheitsoperatoren.

Obwohl manchmal finde ich den folgenden Test in verschiedenen Quellen:

isinstance(test, type(None)) 

Auf diese Weise OK aussieht, aber ich kann nicht ganz verstehen, warum einfach und lesbar Konstruktion kann mit isinstance ersetzt werden. Ist es in einigen Fällen sinnvoller oder vielleicht auch auf den Codestyle bezogen?

UPD: die einzige NoneType mit isinstance Überprüfung finde ich wirklich nützlich (bisher):

isinstance(None, (NoneType, str, float)) 
+1

Klingt, als hätte ein Programmierer 'NoneType' in einer Fehlermeldung gesehen und entschieden, das zu testen, ohne das Problem wirklich zu verstehen. Es gibt keinen Vorteil. – user2357112

+1

https://media1.tenor.com/images/fb50f8dd802894fce6bdafef59ddd84d/tenor.gif –

+0

Sie können auch 'type (test) == None .__ class__' eingeben und es würde funktionieren. Der Punkt ist, ein Entwickler ist frei, die Lösung in jeder möglichen Weise zu erreichen, es bedeutet nicht immer, dass es einen Grund dafür gibt. –

Antwort

4

Nein, es gibt nie einen Grund, dass Konstrukt zu verwenden.

Sie können keine Unterklasse NoneType. Das einzige Objekt, das diesen Test jemals besteht, ist der None Singleton. Diese Zeile wurde wahrscheinlich von jemandem geschrieben, der das nicht wusste und dachte, sie müssten auch nach Unterklassen suchen.

Verwandte Themen