Fehlerbehandlung in Python
In diesem Artikel erklären wir die Fehlerbehandlung in Python.
YouTube Video
Fehlerbehandlung in Python
Die Fehlerbehandlung in Python erfolgt hauptsächlich mit den Schlüsselwörtern try
, except
, else
und finally
. Mit diesen Konstrukten können Sie angemessen auf Fehler in Ihrem Programm reagieren. Im Folgenden erklären wir Ihnen die Verwendung jedes dieser Konstrukte.
try
-Block
Im try
-Block schreiben Sie den Code, den Sie ausführen möchten. Wenn in diesem Block ein Fehler auftritt, wechselt die Programmausführung sofort in den except
-Block.
1try:
2 # Code that may raise an error (division by zero, for example)
3 #number = int(input("Enter a number: "))
4 number = int("abc")
5 result = 10 / number
6 print("Result:", result)
7except ValueError as e:
8 # Handle invalid input (e.g. non-numeric input)
9 print("Invalid input. Please enter a whole number.")
10 print(f"Value error: {e}")
11except ZeroDivisionError as e:
12 # Handle division by zero error
13 print("Cannot divide by zero!")
14 print(f"Zero division error: {e}")
- Dieser Code ist ein Beispiel dafür, wie Fehler in einem
try
-Block erkannt und durch das Abfangen von entwederValueError
oderZeroDivisionError
angemessen behandelt werden.
except
-Block
Im except
-Block schreiben Sie den Code, der ausgeführt wird, wenn eine bestimmte Ausnahme (ein Fehler) auftritt. Sie können auch bestimmte Ausnahmen abfangen, je nach Art der auftretenden Ausnahme.
1try:
2 #number = int(input("Enter a number: "))
3 number = 0
4 result = 10 / number
5 print("Result:", result)
6except ZeroDivisionError as e:
7 print("Cannot divide by zero!")
8 print(f"Zero division error: {e}")
9except ValueError as e:
10 print("Input was not a valid integer.")
11 print(f"Value error: {e}")
- Dieser Code ist ein Beispiel dafür, wie im Fall eines Fehlers im
try
-Block für jeden Ausnahmetyp eine unterschiedliche Behandlung imexcept
-Block durchgeführt wird.
Gemeinsame Behandlung mehrerer Ausnahmen
Geben Sie ein Tupel an, wenn mehrere Ausnahme-Klassen die gleiche Behandlungslogik nutzen können.
1try:
2 my_list = [1, 2]
3 result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5 print(f"Exception occurred: {e}")
- Dieser Code ist ein Beispiel dafür, wie sowohl
IndexError
als auchZeroDivisionError
gemeinsam abgefangen und auf die gleiche Weise behandelt werden.
Bedingungsloses Abfangen von Ausnahmen
Lassen Sie das Argument für except
weg, wenn Sie alle Arten von Ausnahmen in einem Block behandeln möchten.
1try:
2 # This code might cause some exception
3 result = "10" + 5 # TypeError
4except Exception as e:
5 print("Unexpected error")
- Das gezielte Behandeln bestimmter Ausnahmen ist jedoch hilfreicher beim Auffinden und Debuggen von Fehlern, als das bedingungslose Abfangen aller Ausnahmen. Wenn möglich, erhöht das explizite Behandeln nur erwarteter Ausnahmen wie
ValueError
oderTypeError
die Robustheit Ihres Codes.
else
-Block
Der else
-Block wird nur ausgeführt, wenn im try
-Block keine Fehler auftreten.
1try:
2 #number = int(input("Enter a number: "))
3 number = 5
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)
- Dieser Code ist ein Beispiel dafür, dass der
else
-Block nur ausgeführt wird, wenn imtry
-Block kein Fehler auftritt.
finally
-Block
Der finally
-Block dient dazu, Code zu schreiben, der am Ende immer ausgeführt wird, unabhängig davon, ob im try
-Block ein Fehler aufgetreten ist. Er ist nützlich, um Ressourcen freizugeben oder Bereinigungsaufgaben durchzuführen.
1try:
2 #number = int(input("Enter a number: "))
3 number = int("abc")
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)
14finally:
15 # This block will always execute, regardless of whether an exception was raised
16 print("Execution completed.")
- Dieser Code zeigt, dass der
finally
-Block unabhängig davon ausgeführt wird, ob eine Ausnahme auftritt oder nicht.
Das Schlüsselwort raise
Es ist auch möglich, eine Ausnahme mit dem Schlüsselwort raise
auszulösen, wenn bestimmte Bedingungen im bestehenden Code nicht erfüllt sind.
1def divide(a, b):
2 if b == 0:
3 raise ValueError("Cannot divide by zero.")
4 return a / b
5
6try:
7 result = divide(10, 0)
8except ValueError as e:
9 print(f"Error: {e}")
- Dieser Code ist ein Beispiel dafür, wie eine Ausnahme explizit mit dem Schlüsselwort
raise
ausgelöst wird, wenn eine Bedingung nicht erfüllt ist.
Fazit
Durch die Fehlerbehandlung auf diese Weise können Sie Programmabstürze verhindern, dem Benutzer entsprechende Meldungen anzeigen und mit der weiteren Programmausführung fortfahren.
Sie können den obigen Artikel mit Visual Studio Code auf unserem YouTube-Kanal verfolgen. Bitte schauen Sie sich auch den YouTube-Kanal an.