ZeroDivisionError und ValueError (Python)
Kurz: Eine Division durch null löst ZeroDivisionError aus; ein ValueError tritt auf, wenn ein Wert zwar den richtigen Typ, aber einen unpassenden Inhalt hat.
Genauer: Beide Fehler stehen für Eingabedaten, die der Code nicht verarbeiten kann. Vor allem bei Benutzereingaben, Dateien und Berechnungen sind sie häufig.
Im Detail
ZeroDivisionError
print(10 / 0) # ZeroDivisionError: division by zeroAuch 10 % 0 und 10 // 0 lösen ihn aus. Lösung: Vor der Division prüfen (if nenner != 0:) und den Fall behandeln (Standardwert, Fehlermeldung). Bei Gleitkommazahlen kann ein Ergebnis „fast null“ sein; dann mit Toleranz (math.isclose) arbeiten.
ValueError
int("abc") # ValueError: invalid literal for int() with base 10: 'abc'
float("1,5") # ValueError (Komma statt Punkt)
import math
math.sqrt(-1) # ValueError: math domain error
a, b = [1, 2, 3] # ValueError: too many values to unpackLösungen: Eingaben prüfen oder bereinigen (text.strip(), Komma durch Punkt ersetzen), mit str.isdigit() oder try/except ValueError absichern und dem Nutzer eine verständliche Meldung geben. Bei Entpacken die Länge der Liste prüfen.
Fehler abfangen
try:
zahl = int(input("Zahl: "))
print(100 / zahl)
except ValueError:
print("Bitte eine ganze Zahl eingeben.")
except ZeroDivisionError:
print("Durch null kann man nicht teilen.")Fange nur konkrete Fehler ab, nicht pauschal except:; sonst versteckst du echte Programmierfehler. Validiere Eingaben früh und gib klare Rückmeldung.
Siehe auch: TypeError, KeyError und IndexError, Exit-Code 1