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.
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.'
$ 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.
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.