A Byte of Python

try..except

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.

Ausnahmebehandlung

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'
				
				

Ausgabe

				
$ 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
				
				

So funktioniert es

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.