Python Lernhandbuch

Kapitel 8: Fehlerbehandlung und Dateien · Abschnitt 1 von 5

try, except, else, finally

python
try:
    zahl = int(input('Zahl: '))
    ergebnis = 100 / zahl
except ValueError:
    print('Das war keine Zahl')
except ZeroDivisionError:
    print('Durch null geht nicht')
except (KeyError, IndexError) as fehler:     # mehrere Typen, Fehlerobjekt als 'fehler'
    print('Zugriffsfehler:', fehler)
else:
    print('Ergebnis:', ergebnis)               # nur, wenn KEIN Fehler auftrat
finally:
    print('Fertig')                           # läuft immer, auch bei Fehlern
Block Wann er läuft
try Der Code, der fehlschlagen kann. Halte ihn kurz
except Typ Wenn im try genau dieser Fehlertyp (oder ein abgeleiteter) auftritt
except Typ as e Wie oben, e ist das Fehlerobjekt (print(e) zeigt die Meldung)
else Wenn im try kein Fehler auftrat
finally Immer, zum Aufräumen (Verbindung schließen usw.)

Fehler selbst auslösen:

python
def alter_pruefen(alter):
    if alter < 0:
        raise ValueError(f'Ungültiges Alter: {alter}')
    return alter

Eigene Fehlerklasse:

python
class LagerFehler(Exception):
    """Fehler im Lager."""

Mit raise LagerFehler('Nicht genug Bestand') und except LagerFehler: kannst du Fehler gezielt unterscheiden.

Zwei Regeln:

  • Fange nie pauschal alles mit except: oder except Exception: ab, außer ganz oben im Programm zum Protokollieren. Sonst versteckst du echte Programmierfehler.
  • Ein except, das nur pass enthält, verschluckt den Fehler. Wenigstens print oder logging nutzen.

Tipp: Bei Python-Beispielen kannst du auf ▶ Ausprobieren klicken, den Code verändern und direkt ausführen.

← Kapitelübersicht