Gerade Anfänger-Entwickler sehen häufig solchen Code in Bedingungen:
if value:
print("Es gibt einen Wert!")
Anfangs kann es leicht verwirrend sein, was genau die einfache if value:
Anweisung prüft.
Besonders bei diesen beiden:
None
""
(leerer String)
Beide werden als False
bewertet, weshalb sie manchmal wie dasselbe erscheinen können.
Ist das wirklich so?
Falsche Werte
In Python werden folgende Werte in Bedingungen als False bewertet:
None
False
0
,0.0
""
(leerer String)[]
(leere Liste){}
(leeres Dictionary)set()
,()
und andere leere Sammlungen
Das bedeutet, if not value:
erfasst all diese Werte gleichzeitig.
None
und ""
sind unterschiedlich
Diese beiden sehen unterschiedlich aus und verhalten sich anders.
value1 = None
value2 = ""
print(value1 == value2) # False
print(value1 is value2) # False
print(bool(value1)) # False
print(bool(value2)) # False
==
vergleicht Werte, währendis
die Identität vergleicht.None
ist ein besonderes Objekt, das bedeutet, dass es noch keinen Wert gibt,""
ist ein String, der aber leer ist.
Im obigen Bild hält der männliche Charakter links eine Sprechblase, sagt aber nichts — dies entspricht dem leeren String ""
.
Die weibliche Figur rechts hat nicht einmal eine Sprechblase — das ist None
.
Beide werden unter diesen Bedingungen als False
bewertet:
male_voice = ""
female_voice = None
if not male_voice and not female_voice:
print("Beide schweigen!") # da beide False sind, wird dies ausgeführt
Wie unterscheiden wir sie im praktischen Einsatz?
Betrachten wir zum Beispiel die Verarbeitung von Benutzereingaben:
username = user_input.get("username", None)
- Falls der Benutzer keine Eingabe gemacht hat →
None
- Falls der Benutzer einen leeren String eingegeben hat →
""
Wie möchten wir damit unterschiedlich umgehen?
if username is None:
print("Es wurde nichts eingegeben!")
elif username == "":
print("Es wurde ein leerer String eingegeben.")
else:
print("Eingegebener Wert:", username)
Häufige Fehler in der Praxis
Der folgende Code filtert manchmal ungewollt alle Falschen Werte heraus:
if not username:
print("Es gibt keine Eingabe.")
Diese Bedingung umfasst jedoch nicht nur leere Strings, sondern auch None
, 0
, leere Listen usw.
Deshalb muss die Absicht klar sein:
- Selbst leere Werte sollten Strings zulassen →
if username is None:
- Der String sollte existieren, auch wenn er leer ist →
if username != "":
- Es sollte einfach gar kein Wert vorhanden sein →
if not username:
Zusammenfassung
None
und ""
sind nicht dasselbe. Aber beide verhalten sich False
ähnlich.
Wenn Sie den Unterschied kennen und nutzen, können Sie Ihre Absicht im Code klarer und fehlerfreier gestalten.
Im nächsten Artikel werden wir weitere falsche Werte wie 0
, []
, {}
besprechen und die Unterschiede zwischen is
und ==
eingehender betrachten!
Add a New Comment