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