4.1 Abfangen mehrerer Ausnahmen
Python ermöglicht die Behandlung mehrerer Ausnahmen durch die Nutzung mehrerer
except
-Blöcke oder eines except
-Blocks mit einem Tuple von Ausnahmen. Lassen wir uns beide
Ansätze anschauen.
Mehrere except
-Blöcke
Du kannst mehrere except
-Blöcke verwenden, um verschiedene
Arten von Ausnahmen unterschiedlich zu behandeln.
try:
# Code, der eine Ausnahme auslösen könnte
result = int("abc")
except ValueError:
print("Fehler: Ungültiger Wert.")
except ZeroDivisionError:
print("Fehler: Division durch Null.")
Ein except
-Block mit einem Tuple von Ausnahmen
Du kannst mehrere Ausnahmen in einem einzigen except
-Block behandeln, indem du sie als
Tuple übergibst.
try:
# Code, der eine Ausnahme auslösen könnte
result = int("abc")
except (ValueError, ZeroDivisionError) as e:
print(f"Ein Fehler ist aufgetreten: {e}")
Nutzung von except
NameError
as
var
Bei der Behandlung von Ausnahmen kannst du die Syntax
except
<ExceptionType>
as
<variable>
verwenden, um das
Ausnahmeobjekt zu erhalten. So bekommst du Zugang zu Informationen über
die Ausnahme, wie zum Beispiel die Fehlermeldung und andere Attribute.
try:
# Code, der einen NameError auslösen könnte
print(undeclared_variable)
except NameError as e:
print(f"Ein Fehler ist aufgetreten: {e}")
print(f"Fehlertyp: {type(e)}")
4.2 Sichtbarkeit der Fehler-Variable
Die Variable, in der die Ausnahme gespeichert ist (e
im obigen Beispiel), ist
nur innerhalb ihres except
-Blocks verfügbar. Außerhalb dieses Blocks
ist die Variable nicht zugänglich.
try:
# Code, der einen NameError auslösen könnte
print(undeclared_variable)
except NameError as e:
print(f"Ein Fehler ist aufgetreten: {e}")
print(f"Fehlertyp: {type(e)}")
# Hier ist e nicht mehr verfügbar, und die folgende Zeile wird einen NameError auslösen
# print(e) # NameError: name 'e' is not defined
Wenn du außerhalb des Blocks etwas Wichtiges mit der Ausnahme machen möchtest, dann musst du sie in einer separaten Variable speichern. Beispiel:
exception = None
try:
# Code, der eine Ausnahme auslösen könnte
result = int("abc")
except ValueError as e:
exception = e
print("Fehler: Ungültiger Wert.")
except ZeroDivisionError as e:
exception = e
print("Fehler: Division durch Null.")
print(exception)
Beachte, dass die Variable exception
die letzte aufgetretene Ausnahme speichert,
was bei der weiteren Verarbeitung außerhalb des try
-Blocks nützlich sein kann.
4.3 Was ist nützlich in der Ausnahme enthalten
Das Ausnahmeobjekt enthält Informationen über den Fehler. Je nach Typ der Ausnahme kann das Objekt verschiedene Attribute enthalten.
Hier sind einige allgemeine Attribute, die für die meisten Ausnahmen verfügbar sind:
-
args
: Ein Tuple, das die beim Erstellen der Ausnahme übergebenen Argumente enthält. Normalerweise ist dies die Fehlermeldung. -
message
: Ein String, der die Fehlermeldung enthält (in einigen Ausnahmen). -
__str__
: Eine Methode, die die String-Darstellung der Ausnahme zurückgibt. Diese Methode wird verwendet, um die Textdarstellung des Fehlers zu erhalten, die beim Gebrauch derprint()
-Funktion auf das Ausnahmeobjekt zurückgegeben wird.
Beispiel:
try:
# Code, der einen ValueError auslösen könnte
result = int("abc")
except ValueError as e:
print(f"Ein Fehler ist aufgetreten: {e}")
print(f"Fehlerargumente: {e.args}")
print(f"Fehlermeldung: {str(e)}")
Beispielbehandlung mehrerer Ausnahmen
try:
# Code, der mehrere Ausnahmetypen auslösen könnte
result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
print(f"Ein Fehler ist aufgetreten: {e}")
print(f"Fehlertyp: {type(e)}")
print(f"Fehlerargumente: {e.args}")
Wenn ein ValueError
oder ZeroDivisionError
auftritt, wird er vom
except
-Block abgefangen. Die Informationen über die Ausnahme sind über die Variable e
zugänglich. Die Ausgabe
enthält den Fehlertyp und die beim Erstellen der Ausnahme übergebenen Argumente.
GO TO FULL VERSION