6.1 Gezieltes Auslösen von Ausnahmen
In Python kannst du absichtlich Ausnahmen auslösen, indem du
den Operator raise
verwendest. Damit kannst du auf einen Fehler oder
eine falsche Situation in deinem Programm hinweisen. Lass uns
verschiedene Wege anschauen, wie man den raise
-Operator benutzt und
Ausnahmen neu verpackt.
Auslösen von Standard-Ausnahmen
Der allgemeine Syntax für diese Operation sieht so aus:
raise exception
Du kannst Standard-Ausnahmen wie Exception
,
TypeError
und andere auslösen, indem du ihnen entsprechende Nachrichten übergibst.
Beispiel: raise Exception
def check_number(value):
if value < 0:
raise Exception("Sorry, keine Zahlen unter Null")
try:
check_number(-5)
except Exception as e:
print(f"Ausnahme gefangen: {e}")
In diesem Beispiel, wenn der Wert kleiner als Null ist, wird
eine Exception
mit der Nachricht "Sorry, keine Zahlen unter Null"
ausgelöst.
Beispiel: raise TypeError
def check_integer(value):
if not isinstance(value, int):
raise TypeError("Nur ganze Zahlen sind erlaubt")
try:
check_integer("string")
except TypeError as e:
print(f"Ausnahme gefangen: {e}")
In diesem Beispiel, wenn der Wert keine ganze Zahl ist, wird
ein TypeError
mit der Nachricht "Nur ganze Zahlen sind erlaubt"
ausgelöst.
6.2 Neupacken von Ausnahmen
Manchmal ist es notwendig, eine Ausnahme abzufangen und eine andere auszulösen,
um spezifischere oder nützlichere Informationen bereitzustellen. Dies kann
mit dem
Operator raise
... from
gemacht werden, der die ursprüngliche Ausnahme als Grund für
die neue speichert.
Der allgemeine Syntax für diese Operation sieht so aus:
raise neue_ausnahme from alte_ausnahme
Beispiel: Neupacken von Ausnahmen
class EmptyVariableError(Exception):
pass
def check_non_empty(value):
if value == "":
raise ValueError("Die Variable ist leer")
try:
check_non_empty("")
except ValueError as e:
raise EmptyVariableError("Leere Variable entdeckt") from e
In diesem Beispiel, wenn der Wert der Variable leer ist, wird zuerst
ein ValueError
mit der Nachricht "Die Variable ist leer"
ausgelöst.
Diese Ausnahme wird dann abgefangen, und eine neue Ausnahme
EmptyVariableError
mit der Nachricht "Leere Variable
entdeckt"
ausgelöst, wobei die ursprüngliche Ausnahme mit
from
übergeben wird.
6.3 Analyse von neu verpackten Ausnahmen
Die Verwendung des Operators
raise
... from
erlaubt
das Speichern der Informationskette von Ausnahmen, was bei der Fehlersuche nützlich sein kann. Du kannst neu verpackte Ausnahmen und deren
Ursachen analysieren.
Beispiel der Analyse von neu verpackten Ausnahmen:
class EmptyVariableError(Exception):
pass
def check_non_empty(value):
if value == "":
raise ValueError("Die Variable ist leer")
try:
check_non_empty("")
except ValueError as e:
raise EmptyVariableError("Leere Variable entdeckt") from e
Ausführen des obigen Codes führt zu folgendem Output:
Traceback (most recent call last):
File "example.py", line 8, in
check_non_empty("")
File "example.py", line 5, in check_non_empty
raise ValueError("Die Variable ist leer")
ValueError: Die Variable ist leer
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "example.py", line 10, in
raise EmptyVariableError("Leere Variable entdeckt") from e
EmptyVariableError: Leere Variable entdeckt
Der erste Fehler (grün markiert)
ist der ursprüngliche Fehler, der irgendwo tief im Code aufgetreten ist. Manchmal treten solche Fehler von Zeit zu Zeit auf, und das ist normales Verhalten des Programms.
Der zweite Fehler (blau markiert)
ist ein höherstufiger Fehler. Dein Programm oder Framework sollte wissen, wie man es verarbeitet. Wenn du jedoch tiefer graben und die Ursachen des Fehlers herausfinden möchtest, hilft dir der grüne Fehler dabei.
Alles ist sehr vernünftig gemacht.
GO TO FULL VERSION