Fange vorhersehbare Fehler mit try/except/else/finally ab und wirf deine eigenen Ausnahmen, um ungültige Daten zu signalisieren.
Diese Lektion in Kodokon öffnenEin echtes Programm scheitert: fehlende Datei, ungültige Eingabe, abgebrochene Netzwerkverbindung. Python signalisiert diese Situationen mit Ausnahmen, die die Ausführung unterbrechen und den Aufrufstapel hochwandern, bis ein try/except sie abfängt. Der professionelle Reflex: Fange die spezifischste mögliche Ausnahme ab, so nah wie möglich an der Stelle, an der du weißt, was zu tun ist.
def parse_age(text):
try:
return int(text)
except ValueError:
return None
print(parse_age("34")) # 34
print(parse_age("thirty")) # NoneDer vollständige Block hat vier Zweige. try enthält den riskanten Code, except behandelt den Fehler, else läuft nur, wenn keine Ausnahme geworfen wurde, und finally läuft in jedem Fall - ideal, um eine Ressource freizugeben oder zu protokollieren. Der Sinn von else: Halte das try minimal, damit du auf einen Blick siehst, welche Zeile fehlschlagen kann.
values = ["10", "abc", "25"]
total = 0
for value in values:
try:
number = int(value)
except ValueError:
print(f"Skip : {value}")
else:
total += number
finally:
print(f"Process : {value}")
print(total) # 35Deine Funktionen können auch ihre eigenen Ausnahmen mit raise werfen, sobald ein empfangenes Datum ungültig ist: Es ist besser, sofort mit einer klaren Meldung zu scheitern, als ein falsches Ergebnis zu erzeugen. Definiere eine eigene Klasse, die von Exception erbt: Der Aufrufer kann sie dann gezielt abfangen, ohne versehentlich andere Fehler abzufangen.
class EmptyCartError(Exception):
pass
def checkout(items):
if not items:
raise EmptyCartError("Empty cart.")
return round(sum(items), 2)
try:
print(checkout([]))
except EmptyCartError as error:
print(f"Error : {error}")