Exception Handling in Python

Dieser Artikel ist der letzte von 4 Artikeln rund um die Programmiersprache Python. Falls das Thema noch neu für dich ist, schaue am besten bei Teil 3, Teil 2 oder Teil 1 vorbei.

Der input-Befehl

Viele Computerprogramme erlauben eine Interaktion mit dem Anwender. Dazu dient der input-Befehl. Dessen Wert kannst du einer beliebigen Variablen zuweisen. Diese nimmt dann den Wert auf, den der Anwender eingegeben hat. Außerdem kannst du danach in einer Klammer eine Anweisung für die Eingabe anbringen. Wie das funktioniert, zeigt folgendes Programm:

name = input("Gib deinen Namen ein: ")
print("Hallo ", name, "!")

Die Ausgabe:

Dieses Programm fragt zunächst den Namen des Anwenders ab. Danach gibt es eine personalisierte Begrüßung aus, die diesen Namen enthält.

Im nächsten Beispiel wollen wir die Lieblingszahl des Anwenders abfragen und daraufhin deren doppelten Wert ausgeben. Daher formulieren wir das Programm so um, dass es nun diese Aufgabe erfüllt:

zahl = input("Gib deine Lieblingszahl ein: ")
print("Doppelter Wert deiner Lieblingszahl: ", zahl*2)

Anmerkung: Das Sternsymbol dient in Python (genau wie in allen anderen gebräuchlichen Programmiersprachen) als Operator für die Multiplikation. Der Ausdruck zahl*2 verdoppelt daher den in der Variablen zahl gespeicherten Wert.

Wenn wir das Programm ausführen und eine Zahl eingeben, erscheint jedoch nicht das erwartete Ergebnis:

Anstatt den Wert von 6 zu verdoppeln, gibt das Programm die Zahl 66 aus. Um zu verstehen, was hier passiert ist, solltest du dich nochmals an den zweiten Teil dieser Reihe erinnern. Darin wurde beschrieben, dass es verschiedene Datentypen gibt. Wenn der Nutzer eine Eingabe macht, dann handelt es sich dabei meistens um Text – so wie beispielsweise im vorherigen Beispiel. Daher speichert der input-Befehl alle Eingaben als Text ab. Dafür ist der Datentyp Zeichenkette (auch als String bezeichnet) erforderlich.

Wenn der Anwender nun eine Zahl eingibt, kann das Programm nicht wissen, dass es diese auch als Zahl interpretieren soll. Daher speichert es den Wert wie gewohnt als Zeichenkette ab. Das Sternsymbol hat jedoch eine eigene Funktionsweise, wenn man es auf Zeichenketten anwendet: Es gibt den Inhalt in der vorgegebenen Anzahl mehrmals hintereinander aus. Wenn man wie in diesem Beispiel eine Zeichenkette mit 2 multipliziert, gibt das Programm diese zwei Mal hintereinander aus. Aus 6 wird auf diese Weise 66.

Um dafür zu sorgen, dass das Programm die Eingabe wie eine Zahl interpretiert, musst du sie entsprechend umformen. Indem du dem input-Befehl den Ausdruck int voranstellst, wandelst du die Eingabe in eine Ganzzahl (Integer) um. Mit folgendem Code führt das Programm die gewünschte Aktion durch:

ahl = int(input("Gib deine Lieblingszahl ein: "))
print("Doppelter Wert deiner Lieblingszahl: ", zahl*2)

Die Ausgabe:

Was bedeutet Exception Handling?

Beim Lesen der vorherigen Abschnitte hast du dich vielleicht gefragt, was das alles mit Exception Handling zu tun hat. Die Antwort auf diese Frage lautet: nichts! Dennoch waren diese Ausführungen notwendig, um zu verstehen, wie das Programm Nutzereingaben verarbeitet.

Um den Bogen zum Exception Handling zu schlagen, führen wir das Programm, das wir soeben geschrieben haben, erneut aus. Dieses Mal geben wir jedoch nicht unsere Lieblingszahl ein, sondern einen Buchstaben. In der Praxis kommt ein derartiger Fehler immer wieder vor, da sich die Anwender gelegentlich vertippen. Was daraufhin passiert, siehst du im folgenden Screenshot:

Bei der entsprechenden Eingabe bricht der Interpreter das Programm ab und gibt eine Fehlermeldung aus. In diesem Fall spricht man von einem Laufzeitfehler. Dieser tritt auf, wenn der Anwender eine unerwartete Eingabe macht, die das Programm nicht verarbeiten kann.

Wenn ein Programm abgebrochen wird, ist das jedoch wenig nutzerfreundlich. Daher sollte das Ziel beim Programmieren stets darin bestehen, einen möglichst robusten Code zu erzeugen. Das bedeutet, dass er auch mit unerwarteten Eingaben umgehen kann.

try

Um ein robustes Programm zu erstellen, kommt das Exception Handling – auf Deutsch auch als Ausnahmebehandlung bezeichnet – zum Einsatz. Damit es bei einem Laufzeitfehler nicht zu einem Abbruch kommt, müssen wir die entsprechende Stelle mit dem Begriff try kennzeichnen und einrücken:

try:
    zahl = int(input("Gib deine Lieblingszahl ein: "))
    print("Doppelter Wert deiner Lieblingszahl: ", zahl*2)

Das führt dazu, dass der Interpreter nur probiert, den entsprechenden Befehl auszuführen. Gibt es keine Probleme, läuft das Programm wie geplant ab. Tritt jedoch ein Fehler auf, führt das dennoch nicht zu einem Abbruch.

except

Ein try-Block darf jedoch niemals alleine stehen. Daran muss sich immer ein except-Block anschließen. Darin steht, was das Programm tun soll, wenn innerhalb des try-Blocks ein Fehler auftritt. Dieser Block wird mit dem Begriff except eingeleitet. Danach steht die Angabe, welche Art von Fehler du damit behandeln willst. Python kennt viele verschiedene Arten von Fehlern. Anhand dieser Angabe ist es möglich, auf jedes Problem individuell einzugehen.

Bei dem Laufzeitfehler, der bei unserem Programm aufgetreten ist, handelt es sich um einen ValueError. Das erkennst du an der Fehlermeldung, die das Programm ausgegeben hat. Darin war genau dieser Begriff angegeben. Daher muss die Einleitung für unseren except-Block so aussehen:

except ValueError:

Hier können wir nun beliebige Befehle einfügen. Sinnvoll ist es an dieser Stelle, einen Hinweis anzubringen, dass der Anwender eine Zahl eingeben soll. Das komplette Programm sieht dann so aus:

try:
    zahl = int(input("Gib deine Lieblingszahl ein: "))
    print("Doppelter Wert deiner Lieblingszahl: ", zahl*2)
except ValueError:
    print("Gib das nächste Mal bitte eine Zahl ein!")

Wenn man das Programm nun erneut ausführt und einen Buchstaben anstatt einer Zahl eingibt, kommt es nicht mehr zu einem Abbruch. Stattdessen gibt das Programm den entsprechenden Hinweis aus:

Weitere Ressourcen

Wir hoffen, dass dir diese Artikelreihe gefallen hat und dein Interesse an Python geweckt wurde.
Wie bereits im ersten Teil dieser Reihe erwähnt: Python lernen lohnt sich. Die Programmiersprache macht Spaß, ist vergleichsweise einfach zu lernen ( hier gibt es einen kleinen Programmiersprachen-Vergleich) und die Nachfrage nach Python-Entwicklern ist riesig groß und wächst stetig. Jetzt ist ein guter Zeitpunkt um zu starten.

Rückmeldungen