Articles

Python-Ausnahmebehandlung mit try-, except- und finally-Anweisung

Ausnahmen in Python

Python hat viele eingebaute Ausnahmen, die ausgelöst werden, wenn Ihr Programm auf einen Fehler stößt (etwas im Programm geht schief).

Wenn diese Ausnahmen auftreten, hält der Python-Interpreter den aktuellen Prozess an und übergibt ihn an den aufrufenden Prozess, bis er behandelt wird. Wenn sie nicht behandelt wird, stürzt das Programm ab.

Betrachten wir zum Beispiel ein Programm, in dem wir eine Funktion A haben, die die Funktion B aufruft, die wiederum die Funktion C aufruft. Wenn in der Funktion C eine Exception auftritt, die in C nicht behandelt wird, wird die Exception an B und dann an A weitergereicht.

Wenn sie nicht behandelt wird, wird eine Fehlermeldung angezeigt und unser Programm kommt unerwartet zum Stillstand.

Ausnahmen in Python abfangen

In Python können Ausnahmen mit einer try-Anweisung behandelt werden.

Die kritische Operation, die eine Ausnahme auslösen kann, wird innerhalb der try-Klausel platziert. Der Code, der die Ausnahmen behandelt, wird in der except-Klausel geschrieben.

Wir können also wählen, welche Operationen ausgeführt werden sollen, sobald wir die Ausnahme abgefangen haben. Hier ist ein einfaches Beispiel.

Ausgabe

In diesem Programm schleifen wir durch die Werte der randomList-Liste. Wie bereits erwähnt, befindet sich der Teil, der eine Exception verursachen kann, innerhalb des try-Blocks.

Wenn keine Exception auftritt, wird der except-Block übersprungen und der normale Ablauf geht weiter (für den letzten Wert). Wenn jedoch eine Ausnahme auftritt, wird sie vom except-Block abgefangen (für den ersten und zweiten Wert).

Hier drucken wir den Namen der Ausnahme mithilfe der exc_info()-Funktion innerhalb des sys-Moduls. Wir sehen, dass a zu ValueError und 0 zu ZeroDivisionError führt.

Da jede Exception in Python von der Basisklasse Exception erbt, können wir die obige Aufgabe auch auf folgende Weise lösen:

Dieses Programm hat die gleiche Ausgabe wie das obige Programm.

Spezifische Ausnahmen in Python abfangen

Im obigen Beispiel haben wir in der except-Klausel keine spezifische Ausnahme erwähnt.

Das ist keine gute Programmierpraxis, da dadurch alle Ausnahmen abgefangen und jeder Fall gleich behandelt wird. Wir können angeben, welche Ausnahmen eine except-Klausel abfangen soll.

Eine try-Klausel kann eine beliebige Anzahl von except-Klauseln haben, um verschiedene Ausnahmen zu behandeln, allerdings wird nur eine ausgeführt, wenn eine Ausnahme auftritt.

Wir können ein Tupel von Werten verwenden, um mehrere Ausnahmen in einer except-Klausel anzugeben. Hier ist ein Beispiel-Pseudocode.

try: # do something passexcept ValueError: # handle ValueError exception passexcept (TypeError, ZeroDivisionError): # handle multiple exceptions # TypeError and ZeroDivisionError passexcept: # handle all other exceptions pass

Ausnahmen in Python auslösen

In der Python-Programmierung werden Ausnahmen ausgelöst, wenn zur Laufzeit Fehler auftreten. Wir können Ausnahmen auch manuell mit dem Schlüsselwort raise auslösen.

Wir können optional Werte an die Ausnahme übergeben, um zu klären, warum diese Ausnahme ausgelöst wurde.

Python try mit else-Klausel

In manchen Situationen möchten Sie vielleicht einen bestimmten Codeblock ausführen, wenn der Codeblock innerhalb von try ohne Fehler gelaufen ist. Für diese Fälle können Sie das optionale else-Schlüsselwort mit der try-Anweisung verwenden.

Hinweis: Ausnahmen in der else-Klausel werden von den vorhergehenden except-Klauseln nicht behandelt.

Schauen wir uns ein Beispiel an:

Ausgabe

Wenn wir eine ungerade Zahl übergeben:

Enter a number: 1Not an even number!

Wenn wir eine gerade Zahl übergeben, wird der Kehrwert berechnet und angezeigt.

Enter a number: 40.25

Wenn wir jedoch 0 übergeben, erhalten wir ZeroDivisionError, da der Codeblock innerhalb von else nicht durch das vorangehende except behandelt wird.

Python try…finally

Die try-Anweisung in Python kann eine optionale finally-Klausel haben. Diese Klausel wird auf jeden Fall ausgeführt und wird im Allgemeinen verwendet, um externe Ressourcen freizugeben.

Zum Beispiel können wir über das Netzwerk mit einem entfernten Rechenzentrum verbunden sein oder mit einer Datei oder einer grafischen Benutzeroberfläche (GUI) arbeiten.

In all diesen Fällen müssen wir die Ressource aufräumen, bevor das Programm zum Stillstand kommt, unabhängig davon, ob es erfolgreich ausgeführt wurde oder nicht. Diese Aktionen (Schließen einer Datei, GUI oder Trennen vom Netzwerk) werden in der finally-Klausel ausgeführt, um die Ausführung zu garantieren.

Hier ein Beispiel für Dateioperationen, um dies zu veranschaulichen.

try: f = open("test.txt",encoding = 'utf-8') # perform file operationsfinally: f.close()

Diese Art von Konstrukt stellt sicher, dass die Datei geschlossen wird, auch wenn eine Ausnahme während der Programmausführung auftritt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.