Ausnahmebehandlung in Python – Teil 2

Im ersten Teil ging es um die Grundlagen zur Ausnahmebehandlung (exception handling) in Python. Neben der Vorstellung von tryexcept wurde dort außerdem erklärt, wie mit raise eine Ausnahme an den Aufrufer hochgereicht wird.

else und finally

Im zweiten Teil zu diesem Thema werfen wir einen Blick auf else und finally die zusammen mit einem tryexcept-Block verwendet werden können. Betrachten wir dazu folgendes Beispiel:

def add_values(a: int, b: int) -> int:
    return a + b

def main():
    try:
        first_value = int(input('Bitte den ersten Wert eingeben: '))
        second_value = int(input('Bitte den zweiten Wert eingeben: '))
    except ValueError as e:
        print("Fehlerhafte Eingabe!")
        print(e)
    else:
        result = add_values(first_value, second_value)
        print(f"Die Addition von {first_value} durch {second_value} ergibt {result}.")
    finally:
        print("Das Programm wurde beendet!")

if __name__ == '__main__':
    main()

Die Funktion add_values() kann nur Integer-Werte addieren. Dementsprechend darf der Anwender auch nur Werte vom Typ int eingeben.

Mit int(input()) wird die eingegebene Zeichenfolge — ein str — in den Datentyp int konvertiert. Da hierbei ein Fehler auftreten kann, ist der Code in einem try-Block eingebettet. Im except-Block wird ein etwaiger Fehler abgefangen und eine Fehlermeldung ausgegeben. Sofern Ihr den ersten Teil zu diesem Thema gelesen habt, wird dies nichts Neues für Euch sein.

Mit den dann folgenden else– und finally-Blöcken kommt aber etwas Neues hinzu. Der else-Zweig wird ausgeführt, wenn der Code im try-Block fehlerfrei ausgeführt wurde. Sollte also die Nutzerin oder der Nutzer Zahlen, die zu int konvertiert werden können, eingegeben haben, dann wird im else-Block die Funktion add_values() aufgerufen. Außerdem wird das Ergebnis über die print-Funktion ausgegeben.

Kommen wir zum Schluß zu finally. Der Code in diesem Block wird immer ausgeführt, unabhängig davon, ob ein Fehler aufgetreten ist. In diesem Beispiel wird also immer „Das Programm wurde beendet!“ ausgegeben.

Weiterführende Links