EMZETT.
Login

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 zero

Auch 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 unpack

Lö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