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ährend is die Identität vergleicht.
  • None ist ein besonderes Objekt, das bedeutet, dass es noch keinen Wert gibt,
  • "" ist ein String, der aber leer ist.

Empty vs None speech bubble comparison

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)
  1. Falls der Benutzer keine Eingabe gemacht hat → None
  2. 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 zulassenif username is None:
  • Der String sollte existieren, auch wenn er leer istif username != "":
  • Es sollte einfach gar kein Wert vorhanden seinif 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!