Seite 1 von 1
None
Verfasst: Dienstag 9. Juli 2013, 16:06
von joh#
Hallo,
kann mir jemand sagen, wieso ich hier nicht zu a=1 komme
(obwohl intVal None zugewiesen wurde):
Code: Alles auswählen
intVal = None
print type(intVal)
if (type(intVal) == None):
a = 1
else:
a = 2
gruß
joh
Re: None
Verfasst: Dienstag 9. Juli 2013, 16:15
von EyDu
Hallo,
dann schau dir doch mal an, was ``type(None)`` für ein Ergebnis liefert. Außerdem sollte man nicht gegen ``type(...)`` testen, sondern mittels ``isinstance(...)``. Oft ist aber bereits ein Test auf Typen ein Fehler. Python verwendet Duck-Typing, da muss ein Objekt nur ein bestimmtes Verhalten an den Tag legen und nicht von einem Typ abhängen. Auch solltest du keine Klammern bei den if-Statements verwenden, die gehören dort nicht hin.
Re: None
Verfasst: Dienstag 9. Juli 2013, 19:16
von /me
Ordentlich wäre ohnehin die Prüfung mit
is.
Re: None
Verfasst: Mittwoch 10. Juli 2013, 07:33
von joh#
/me hat geschrieben:Ordentlich wäre ohnehin die Prüfung mit
is.
ok, das führt (erwartungsgemäß) dann auch zum Ausführen des if-Zweiges.
Komisch (oder gewöhnungsbedürftig) ist nur, daß in
Code: Alles auswählen
intVal = None
print type(intVal)
b = intVal == None
print b
if b:
a = 1
else:
a = 2
der if-Zweig ausgeführt wird obwohl das b sein True aus dem
im ersten Bsp. "nicht richtigem True liefernden" Vergleich bekommt.
Wird hier das True irgendwie veredelt

joh
Re: None
Verfasst: Mittwoch 10. Juli 2013, 07:53
von BlackJack
@joh#: Ich verstehe nicht so ganz was Du hier fragst. Natürlich kannst Du `None` auch mit ``==`` vergleichen und bekommst `True` wenn die Ausdrücke auf beiden Seiten `None` ergeben. In Deinem ersten Beispiel ergeben beide Seiten aber nicht `None` sondern eine ist `None` und die andere ist `NoneType`. Und *die* beiden Objekte sind weder gleich (``==``) und schon gar nicht identisch (``is``). Du vergleichst im ersten Beispiel den Typ eines Objekts mit einem Exemplar dieses Typs. Dass das `False` ist, sollte eigentlich nicht überraschen. Hättest Du denn erwartet das ``type(42) == 23`` wahr ist? Warum sollte dann ``type(None) == None`` wahr sein?
Re: None
Verfasst: Mittwoch 10. Juli 2013, 09:52
von Sirius3
Ausnahmen bestätigen die Regel: