Wir wollen versuchen, eine Eingabe vom Benutzer entgegenzunehmen. Drücken Sie Strg+d (oder Strg+z unter Windows), und achten Sie darauf, was passiert.
>>> s = raw_input('Geben Sie etwas ein --> ') Enter something --> Traceback (most recent call last): File "<stdin>", line 1, in ? EOFError
Python löst als Fehler eine Ausnahme namens EOFError
aus,
was grundsätzlich bedeutet, dass das Ende einer Datei (EOF)
erreicht wurde (bewirkt durch die Eingabe Strg+d
oder Strg+z),
wo dies nicht erwartet wurde.
Wir sehen nun, wie man solche Fehler behandelt.
Wir können Ausnahmen mit Hilfe der Anweisung try..except
behandeln. Wir schreiben dazu unsere normalen Anweisungen in den Block,
der auf try
folgt, und schreiben unsere Anweisungen zur
Fehlerbehandlung in den Block, der auf except
folgt.
Beispiel 13.1. Ausnahmebehandlung (try_except.py)
#!/usr/bin/python import sys try: s = raw_input('Geben Sie etwas ein --> ') except EOFError: print '\nWarum haben Sie die Eingabe abgebrochen?' sys.exit() # beendet das Programm except: print '\nIrgendein Fehler hat eine Ausnahme ausgeloest.' # an dieser Stelle beenden wir das Programm nicht print 'Fertig'
$ python try_except.py Geben Sie etwas ein --> Warum haben Sie die Eingabe abgebrochen? $ python try_except.py Geben Sie etwas ein --> Python ist eine Ausnahmeerscheinung! Fertig
Wir stecken alle Anweisungen, die einen Fehler auslösen könnten,
in den try
-Block und behandeln dann alle Fehler
und Ausnahmen in dem Block der except
-Klausel.
Die except
-Klausel kann einzeln angegebene
Fehler oder Ausnahmen behandeln, oder auch eine in Klammern
angegebene Liste von Fehlern/Ausnahmen. Wenn keine Namen von
Fehlern oder Ausnahmen angegeben werden, dann behandelt sie
alle Fehler und Ausnahmen.
Zu jeder try
-Klausel muss mindestens eine
except
-Klausel gehören (oder stattdessen eine
finally
-Klausel, aber darüber sprechen wir später).
Wenn irgendein Fehler oder eine Ausnahme nicht behandelt wird, dann wird die Standard-Ausnahmebehandlung von Python aufgerufen, die einfach die Ausführung des Programms beendet und eine Fehlermeldung ausgibt. Wir haben dies bereits mehrfach gesehen.
Sie können auch eine else
-Klausel mit einem
try..except
-Block kombinieren. Die else
-Klausel
wird dann ausgeführt, wenn keine Ausnahme auftritt.
Wir können auch auf das Ausnahmeobjekt zugreifen, um dadurch weitere Informationen über die Ausnahme zu erhalten, die aufgetreten ist. Dies wird im nächsten Beispiel gezeigt.