A Byte of Python

Auslösen von Ausnahmen

Sie können Ausnahmen mit der Anweisung raise auch selber auslösen. Sie müssen zusätzlich den Namen des Fehlers bzw. der Ausnahme angeben, und können außerdem weitere Informationen angeben, die bei der Auslösung dieser Ausnahme an die Ausnahmebehandlung weitergegeben werden sollen. Der Fehler oder die Ausnahme sollte eine Klasse sein, die direkt oder indirekt von der Klasse Exception abgeleitet ist.

So löst man Ausnahmen aus

Beispiel 13.2. So löst man Ausnahmen aus (ausnahmen.py)

				
#!/usr/bin/python

class KurzeEingabeAusnahme(Exception):
	'''Eine benutzerdefinierte Ausnahmeklasse.'''
	def __init__(self, laenge, mindestens):
		Exception.__init__(self)
		self.laenge = laenge
		self.mindestens = mindestens

try:
	s = raw_input('Geben Sie etwas ein --> ')
	if len(s) < 3:
		raise KurzeEingabeAusnahme(len(s), 3)
	# Hier kann man ganz normal mit der Arbeit fortfahren
except EOFError:
	print '\nWarum haben Sie die Eingabe abgebrochen?'
except KurzeEingabeAusnahme, x:
	print 'KurzeEingabeAusnahme: Eingabe hatte die Laenge %d,' \
		' gefordert war mindestens %d.' % (x.laenge, x.mindestens)
else:
	print 'Es wurde keine Ausnahme ausgeloest.'
				
				

Ausgabe

				
$ python ausnahmen.py
Geben Sie etwas ein -->
Warum haben Sie die Eingabe abgebrochen?

$ python ausnahmen.py
Geben Sie etwas ein --> ab
KurzeEingabeAusnahme: Eingabe hatte die Laenge 2, gefordert war mindestens 3.

$ python ausnahmen.py
Geben Sie etwas ein --> abc
Es wurde keine Ausnahme ausgeloest.
				
				

So funktioniert es

Wir erzeugen hier unseren eigenen Ausnahmetyp, obwohl wir auch jede andere vordefinierte Ausnahme zu Demonstrationszwecken hätten benutzen können. Dieser neue Ausnahmetyp ist die Klasse KurzeEingabeAusnahme. Sie hat zwei Felder - laenge, die Länge der Eingabe, und mindestens, die Mindestlänge für die Eingabe, die das Programm erwartet.

In der except-Klausel geben wir sowohl die Fehlerklasse an, als auch die Variable, die das entsprechende Fehler/Ausnahmeobjekt erhalten soll. Dies entspricht den Parametern und Argumenten in einem Funktionsaufruf. Innerhalb dieser speziellen except-Klausel benutzen wir die Felder laenge und mindestens des Ausnahmeobjekts, um eine entsprechende Fehlermeldung für den Benutzer auszugeben.