Benutzerdefinierte Ausnahmen auslösen
Manchmal müssen Sie signalisieren, dass in Ihrem Code ein Fehler oder eine außergewöhnliche Bedingung aufgetreten ist, auch wenn keine integrierte Ausnahme ausgelöst wurde. Dies können Sie mit der raise
-Anweisung tun. Die raise
-Anweisung ermöglicht es Ihnen, das Auftreten einer bestimmten Ausnahme zu erzwingen.
Sie können integrierte Ausnahmen auslösen oder sogar Ihre eigenen benutzerdefinierten Ausnahmen definieren und auslösen. Benutzerdefinierte Ausnahmen sind nützlich, um spezifischere und informativere Fehlertypen für Ihre Anwendungen zu erstellen.
Erstellen wir ein einfaches Skript, das eine integrierte Ausnahme auslöst, und dann ein weiteres Skript, das eine benutzerdefinierte Ausnahme definiert und auslöst.
Öffnen Sie das integrierte Terminal und stellen Sie sicher, dass Sie sich im Verzeichnis ~/project
befinden.
Erstellen Sie eine neue Python-Datei namens raise_exception.py
im Verzeichnis ~/project
.
Öffnen Sie ~/project/raise_exception.py
im Editor der WebIDE und fügen Sie den folgenden Code hinzu:
def check_positive(number):
if number <= 0:
raise ValueError("Input must be a positive number")
print(f"The number {number} is positive.")
try:
check_positive(-5)
except ValueError as e:
print(f"Caught an exception: {e}")
try:
check_positive(10)
except ValueError as e:
print(f"Caught an exception: {e}")
Speichern Sie die Datei.
Führen Sie das Skript nun über das Terminal aus:
python ~/project/raise_exception.py
Beispielausgabe:
Caught an exception: Input must be a positive number
The number 10 is positive.
In diesem Beispiel löst die Funktion check_positive
einen ValueError
aus, wenn die eingegebene Zahl nicht positiv ist. Die try...except
-Blöcke zeigen, wie diese Funktion aufgerufen und die ausgelöste Ausnahme abgefangen wird.
Erstellen wir nun eine benutzerdefinierte Ausnahme. Benutzerdefinierte Ausnahmen werden typischerweise als Klassen definiert, die von der integrierten Exception
-Klasse oder einer ihrer Unterklassen erben.
Erstellen Sie eine neue Python-Datei namens custom_exception.py
im Verzeichnis ~/project
.
Öffnen Sie ~/project/custom_exception.py
im Editor der WebIDE und fügen Sie den folgenden Code hinzu:
class NegativeNumberError(Exception):
"""Custom exception raised for negative numbers."""
pass
def process_positive_number(number):
if number < 0:
raise NegativeNumberError("Negative numbers are not allowed")
print(f"Processing positive number: {number}")
try:
process_positive_number(-10)
except NegativeNumberError as e:
print(f"Caught custom exception: {e}")
try:
process_positive_number(20)
except NegativeNumberError as e:
print(f"Caught custom exception: {e}")
Speichern Sie die Datei.
Führen Sie das Skript nun über das Terminal aus:
python ~/project/custom_exception.py
Beispielausgabe:
Caught custom exception: Negative numbers are not allowed
Processing positive number: 20
Hier haben wir eine benutzerdefinierte Ausnahmeklasse NegativeNumberError
definiert. Die Funktion process_positive_number
löst diese benutzerdefinierte Ausnahme aus, wenn sie auf eine negative Zahl stößt. Der try...except
-Block fängt speziell NegativeNumberError
ab.
Sie können raise
auch ohne Angabe einer Ausnahme innerhalb eines except
-Blocks verwenden, um die gerade abgefangene Ausnahme erneut auszulösen. Dies ist nützlich, wenn Sie eine Ausnahme teilweise behandeln und sie dann weiter im Aufrufstapel propagieren lassen möchten.