Fehlerbehandlung in Python

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 entweder ValueError oder ZeroDivisionError 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 im except-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 auch ZeroDivisionError 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 oder TypeError 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 im try-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.

YouTube Video