Fehler abfangen

Wenn wir in Python eine Division durch Null berechnen möchten, erhalten wir eine ZeroDivisionError und das Programm bricht ab. Wir können aber den Fehler auch abfangen. Dazu packen wir den Code welcher einen Fehler generieren kann, in einen try-Block – wir sagen Python sozusagen: versuche den Code auszuführen! Anschliessend folgt ein except-Block. Dieser wird ausgeführt, falls im try-Block eine Exception aufgetreten ist. Für jede Art Exception, die im try-Block auftreten können, kann ein zugehöriger except-Block definiert werden.

def divide(x,y):
    try:
        result = x/y
        print(result)
    except ZeroDivisionError:
        print("Division durch Null!")

divide(12,4)
divide(12,0)

Der erste Aufruf von divide gibt als Ausgabe 3.0. Beim zweiten Aufruf tritt ein ZeroDivisionError auf, d.h. die Funktion wir auf der Zeile result = x/y abgebrochen und es wird der except-Block ausgeführt.


Optional lässt sich ein else-Block einfügen, welcher dann ausgeführt wird, wenn keine Exception aufgerufen wird. Das obige Beispiel würde dann wie folgt aussehen:

def divide(x,y):
    try:
        result = x/y
    except ZeroDivisionError:
        print("Division durch Null!")
    else:
        print(result)

divide(12,4)
divide(12,0)

Weiter lässt sich ein finally-Block einbauen. Dieser wird am Schluss des try-Statements, immer – egal ob Exception oder nicht – ausgeführt:

def divide(x,y):
    try:
        result = x/y
    except ZeroDivisionError:
        print("Division durch Null!")
    else:
        print(result)
    finally:
        print("Die Divisions-Funktion ist nun fertig")

divide(12,4)
divide(12,0)