In der ersten Übung wurde aufgezeigt, dass der Umgang mit Laufzeitfehlern - wie z.B. der Dision durch 0 - durch das Exception-Handling geregelt werden kann.
Damit ein Programm geordnet auf eine Ausnahme (Exception) reagieren kann, braucht es ein entsprechendes Konstrukt. Dies wird bei Python durch
try: # hier folgt der kritische Code, der potentielle Fehlersituationen haben kann. # typischerweise im Zusammenhang mit Benutzereingaben. except: # hier folgt die Behandlung des Fehlers else: # hier folgt Code, der nur dann ausgeführt wird, wenn es keine Exception gibt finally: # hier folgt Code der sowohl als auch ausgeführt wird.
sichergestellt.
Bildlich dargestellt sieht der Sachverhalt wie folgt aus:
Abb: try-except Klausel
Können in einem Codeabschnitt mehrere potentielle Exceptions auftreten, so können diese gezielt herausgepickt werden. Dazu wird der except
-Befehl parametriert.
if __name__ == '__main__': try: x = float(input('Your number: ')) inverse = 1.0 / x except ValueError: print('You should have given either an int or a float') except ZeroDivisionError: print('Divison bei zero') else: print('well done') finally: print('There may or may not have been an exception.')
Falls der Benutzer in diesem Beispiel einen Buchstaben eingibt (z.B. A
),
resultiert ein ValueError
und es wird der entsprechende except
ausgeführt.
Wird 0
eingegeben, wird ein ZeroDivisionError
geworfen und dann der entsprechende except
-Pfad ausgeführt.
Probieren Sie das Verhalten des Codes im Trinket aus.
Welche Fehlerfälle von der jeweiligen Programmiersprache unterstützt werden, ist der Sprachdokumentation zu entnehmen. Typische Problemfälle sind
Was aber passiert bei Situationen, bei denen aus der Anwendungsdomäne heraus zur Laufzeit Fehler auftreten können? Das wird uns im nächsten Kapitel beschäftigen.