Wie man prüft, ob eine bestimmte Ausnahme in Python ausgelöst wurde

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie prüfen können, ob in Python eine bestimmte Ausnahme (Exception) ausgelöst wurde. Das Lab konzentriert sich darauf, verschiedene Ausnahmetypen zu verstehen und wie man sie effektiv behandeln kann.

Sie werden durch praktische Beispiele in einem Python-Skript übliche Ausnahmetypen wie TypeError, NameError, IndexError, KeyError, ValueError und FileNotFoundError erkunden. Das Lab führt Sie durch das Erstellen einer Datei namens exceptions_demo.py und das Hinzufügen von Code, der zeigt, wie jeder Ausnahmetyp ausgelöst und mithilfe von try...except-Blöcken gefangen wird.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/custom_exceptions("Custom Exceptions") subgraph Lab Skills python/catching_exceptions -.-> lab-559566{{"Wie man prüft, ob eine bestimmte Ausnahme in Python ausgelöst wurde"}} python/raising_exceptions -.-> lab-559566{{"Wie man prüft, ob eine bestimmte Ausnahme in Python ausgelöst wurde"}} python/custom_exceptions -.-> lab-559566{{"Wie man prüft, ob eine bestimmte Ausnahme in Python ausgelöst wurde"}} end

Lernen Sie über Ausnahmetypen

In diesem Schritt lernen Sie verschiedene Arten von Ausnahmen (Exceptions) in Python kennen. Ausnahmen sind Ereignisse, die den normalen Ablauf der Programmausführung unterbrechen. Das Verständnis von Ausnahmetypen ist entscheidend für die effektive Fehlerbehandlung.

Python verfügt über viele integrierte Ausnahmen, und Sie können auch eigene erstellen. Hier sind einige häufige Ausnahmetypen:

  • TypeError: Wird ausgelöst, wenn eine Operation oder Funktion auf ein Objekt eines ungeeigneten Typs angewendet wird.
  • NameError: Wird ausgelöst, wenn ein Name im lokalen oder globalen Namensraum nicht gefunden wird.
  • IndexError: Wird ausgelöst, wenn ein Sequenzindex außerhalb des gültigen Bereichs liegt.
  • KeyError: Wird ausgelöst, wenn ein Dictionary-Schlüssel nicht gefunden wird.
  • ValueError: Wird ausgelöst, wenn eine Operation oder Funktion ein Argument erhält, das den richtigen Typ, aber einen ungeeigneten Wert hat.
  • FileNotFoundError: Wird ausgelöst, wenn eine Datei oder ein Verzeichnis angefordert wird, aber nicht gefunden werden kann.

Lassen Sie uns diese Ausnahmetypen anhand einiger Beispiele untersuchen. Wir werden ein Python-Skript namens exceptions_demo.py im Verzeichnis ~/project mithilfe des VS Code-Editors erstellen.

  1. Öffnen Sie VS Code.
  2. Erstellen Sie eine neue Datei namens exceptions_demo.py im Verzeichnis ~/project.
  3. Fügen Sie den folgenden Code zur Datei exceptions_demo.py hinzu:
## TypeError
try:
    result = 1 + "a"
except TypeError as e:
    print(f"TypeError: {e}")

## NameError
try:
    print(undefined_variable)
except NameError as e:
    print(f"NameError: {e}")

## IndexError
try:
    my_list = [1, 2, 3]
    print(my_list[5])
except IndexError as e:
    print(f"IndexError: {e}")

## KeyError
try:
    my_dict = {"a": 1, "b": 2}
    print(my_dict["c"])
except KeyError as e:
    print(f"KeyError: {e}")

## ValueError
try:
    num = int("abc")
except ValueError as e:
    print(f"ValueError: {e}")

## FileNotFoundError
try:
    with open("nonexistent_file.txt", "r") as f:
        content = f.read()
except FileNotFoundError as e:
    print(f"FileNotFoundError: {e}")

Dieses Skript zeigt, wie verschiedene Ausnahmetypen ausgelöst und mithilfe von try...except-Blöcken gefangen werden. Jeder try-Block enthält Code, der eine bestimmte Ausnahme auslösen kann. Wenn die Ausnahme auftritt, wird der entsprechende except-Block ausgeführt.

Jetzt lassen Sie uns das Skript ausführen:

  1. Öffnen Sie das Terminal in VS Code.
  2. Navigieren Sie zum Verzeichnis ~/project:
cd ~/project
  1. Führen Sie das Skript exceptions_demo.py mit dem Python-Befehl aus:
python exceptions_demo.py

Sie sollten die folgende Ausgabe sehen:

TypeError: unsupported operand type(s) for +: 'int' and 'str'
NameError: name 'undefined_variable' is not defined
IndexError: list index out of range
KeyError: 'c'
ValueError: invalid literal for int() with base 10: 'abc'
FileNotFoundError: [Errno 2] No such file or directory: 'nonexistent_file.txt'

Diese Ausgabe zeigt, dass jeder try-Block die erwartete Ausnahme ausgelöst hat und der entsprechende except-Block die Ausnahmemeldung gefangen und ausgegeben hat.

Das Verständnis verschiedener Ausnahmetypen und wie man sie behandelt, ist für das Schreiben von robustem und zuverlässigem Python-Code unerlässlich. Im nächsten Schritt lernen Sie, wie Sie bestimmte Ausnahmen fangen und entsprechend behandeln können.

Fangen Sie eine bestimmte Ausnahme

Im vorherigen Schritt haben Sie verschiedene Arten von Ausnahmen (Exceptions) in Python kennengelernt. Jetzt lernen Sie, wie Sie eine bestimmte Ausnahme mithilfe des try...except-Blocks fangen können. Dies ermöglicht es Ihnen, verschiedene Fehler auf unterschiedliche Weise zu behandeln und macht Ihren Code robuster.

Beim Fangen von Ausnahmen ist es eine bewährte Methode, so spezifisch wie möglich zu sein. Dies verhindert, dass Ihr except-Block versehentlich Ausnahmen fängt, die er nicht behandeln soll, was Fehler verdecken und das Debugging erschweren kann.

Lassen Sie uns das Skript exceptions_demo.py ändern, um eine bestimmte Ausnahme, wie z. B. ValueError, zu fangen, wenn versucht wird, einen String in eine Ganzzahl umzuwandeln.

  1. Öffnen Sie die Datei exceptions_demo.py im Verzeichnis ~/project mit VS Code.
  2. Ändern Sie das Skript, um nur den ValueError zu fangen, wenn ein String in eine Ganzzahl umgewandelt wird:
try:
    num = int("abc")
except ValueError as e:
    print(f"ValueError caught: {e}")
except Exception as e:
    print(f"Some other exception: {e}")

print("Continuing execution...")

In diesem Beispiel fangen wir speziell den ValueError ab, der auftritt, wenn int("abc") fehlschlägt. Wenn innerhalb des try-Blocks eine andere Ausnahme auftritt, wird sie vom except Exception as e:-Block gefangen. Die Anweisung print("Continuing execution...") wird immer ausgeführt, wenn eine Ausnahme gefangen wird, was zeigt, dass das Programm nach der Behandlung der Ausnahme weiterläuft.

Jetzt lassen Sie uns das Skript ausführen:

  1. Öffnen Sie das Terminal in VS Code.
  2. Navigieren Sie zum Verzeichnis ~/project:
cd ~/project
  1. Führen Sie das Skript exceptions_demo.py mit dem Python-Befehl aus:
python exceptions_demo.py

Sie sollten die folgende Ausgabe sehen:

ValueError caught: invalid literal for int() with base 10: 'abc'
Continuing execution...

Diese Ausgabe zeigt, dass der ValueError gefangen wurde und das Programm fortgesetzt hat.

Jetzt ändern wir das Skript, um eine andere Ausnahme, wie z. B. TypeError, auszulösen und zu sehen, wie sie behandelt wird:

  1. Öffnen Sie die Datei exceptions_demo.py im Verzeichnis ~/project mit VS Code.
  2. Ändern Sie das Skript, um einen TypeError auszulösen:
try:
    result = 1 + "a"
except ValueError as e:
    print(f"ValueError caught: {e}")
except Exception as e:
    print(f"Some other exception: {e}")

print("Continuing execution...")

Jetzt führen Sie das Skript erneut aus:

python exceptions_demo.py

Sie sollten die folgende Ausgabe sehen:

Some other exception: unsupported operand type(s) for +: 'int' and 'str'
Continuing execution...

Diese Ausgabe zeigt, dass der TypeError vom except Exception as e:-Block gefangen wurde, da es keinen spezifischen except TypeError-Block gibt.

Das Fangen bestimmter Ausnahmen ermöglicht es Ihnen, verschiedene Fehler auf unterschiedliche Weise zu behandeln, was Ihren Code robuster und leichter zu debuggen macht. Im nächsten Schritt lernen Sie, wie Sie die Ausnahmeinstanz überprüfen können.

Überprüfen der Ausnahmeinstanz

In diesem Schritt lernen Sie, wie Sie die Ausnahmeinstanz überprüfen können, um mehr Informationen über den aufgetretenen Fehler zu erhalten. Wenn Sie eine Ausnahme fangen, können Sie auf das Ausnahmeobjekt selbst zugreifen, das Details über den Fehler enthält.

Lassen Sie uns das Skript exceptions_demo.py ändern, um den Typ und die Argumente der Ausnahmeinstanz auszugeben.

  1. Öffnen Sie die Datei exceptions_demo.py im Verzeichnis ~/project mit VS Code.
  2. Ändern Sie das Skript, um den Typ und die Argumente der ValueError-Ausnahme auszugeben:
try:
    num = int("abc")
except ValueError as e:
    print(f"Exception type: {type(e)}")
    print(f"Exception arguments: {e.args}")
    print(f"ValueError caught: {e}")
except Exception as e:
    print(f"Some other exception: {e}")

print("Continuing execution...")

In diesem Beispiel geben wir den Typ des Ausnahmeobjekts mit type(e) und die Argumente der Ausnahme mit e.args aus. Das Attribut e.args ist ein Tupel, das die Argumente enthält, die an den Konstruktor der Ausnahme übergeben wurden.

Jetzt lassen Sie uns das Skript ausführen:

  1. Öffnen Sie das Terminal in VS Code.
  2. Navigieren Sie zum Verzeichnis ~/project:
cd ~/project
  1. Führen Sie das Skript exceptions_demo.py mit dem Python-Befehl aus:
python exceptions_demo.py

Sie sollten die folgende Ausgabe sehen:

Exception type: <class 'ValueError'>
Exception arguments: ("invalid literal for int() with base 10: 'abc'",)
ValueError caught: invalid literal for int() with base 10: 'abc'
Continuing execution...

Diese Ausgabe zeigt den Typ der Ausnahme (ValueError) und die Argumente, die an den Konstruktor der Ausnahme übergeben wurden (ein Tupel, das die Fehlermeldung enthält).

Sie können diese Informationen nutzen, um detailliertere Fehlermeldungen bereitzustellen oder spezifische Aktionen basierend auf dem Typ und den Argumenten der Ausnahme auszuführen.

Beispielsweise können Sie überprüfen, ob die Ausnahmeargumente eine bestimmte Fehlermeldung enthalten:

try:
    num = int("abc")
except ValueError as e:
    if "invalid literal" in e.args[0]:
        print("Invalid input: Please enter a valid number.")
    else:
        print(f"ValueError caught: {e}")
except Exception as e:
    print(f"Some other exception: {e}")

print("Continuing execution...")

In diesem Beispiel überprüfen wir, ob das erste Argument der ValueError-Ausnahme die Zeichenkette "invalid literal" enthält. Wenn ja, geben wir eine spezifischere Fehlermeldung aus.

Das Überprüfen der Ausnahmeinstanz ermöglicht es Ihnen, Fehler intelligenter zu behandeln und dem Benutzer informativere Fehlermeldungen bereitzustellen.

Zusammenfassung

In diesem Lab (Praktikum) konzentriert sich der erste Schritt auf das Verständnis verschiedener Ausnahmetypen (Exception-Typen) in Python, die für eine effektive Fehlerbehandlung von entscheidender Bedeutung sind. Das Lab stellt gängige eingebaute Ausnahmen wie TypeError, NameError, IndexError, KeyError, ValueError und FileNotFoundError vor.

Anschließend bietet das Lab praktische Beispiele dafür, wie diese Ausnahmen ausgelöst und mithilfe von try...except-Blöcken gefangen werden. Ein Python-Skript namens exceptions_demo.py wird erstellt, um jeden Ausnahmetyp zu demonstrieren und zu zeigen, wie potenzielle Fehler, die den normalen Ablauf eines Programms stören könnten, vorhergesehen und behandelt werden können.