Python-Ausnahmebehandlung Verwenden Sie die Anweisung try, außer und finally

In diesem Tutorial erfahren Sie anhand von Beispielen, wie Sie mit Ausnahmen in Ihrem Python-Programm umgehen, indem Sie try, exception und schließlich Anweisungen verwenden.

Video: Python-Ausnahmebehandlung (versuchen Sie es… außer… endlich)

Ausnahmen in Python

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

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

Betrachten wir zum Beispiel ein Programm, in dem wir eine Funktion haben A, die die Funktion aufruft B, die wiederum die Funktion aufruft C. Wenn eine Ausnahme in der Funktion auftritt, Caber nicht behandelt wird C, wird die Ausnahme an Bund dann an übergeben A.

Wenn dies nicht behandelt wird, wird eine Fehlermeldung angezeigt und unser Programm kommt plötzlich unerwartet zum Stillstand.

Ausnahmen in Python abfangen

In Python können Ausnahmen mithilfe einer tryAnweisung behandelt werden .

Die kritische Operation, die eine Ausnahme auslösen kann, wird in die tryKlausel eingefügt. Der Code, der die Ausnahmen behandelt, ist in der exceptKlausel geschrieben.

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

 # import module sys to get the type of exception import sys randomList = ('a', 0, 2) for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except: print("Oops!", sys.exc_info()(0), "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r)

Ausgabe

Der Eintrag ist ein Ups! aufgetreten. Nächster Eintrag. Der Eintrag ist 0 Ups! aufgetreten ist. Nächster Eintrag. Der Eintrag ist 2 Der Kehrwert von 2 ist 0,5

In diesem Programm durchlaufen wir die Werte der randomList-Liste. Wie bereits erwähnt, wird der Teil, der eine Ausnahme verursachen kann, innerhalb des tryBlocks platziert.

Wenn keine Ausnahme auftritt, wird der exceptBlock übersprungen und der normale Fluss fortgesetzt (für den letzten Wert). Wenn jedoch eine Ausnahme auftritt, wird sie vom exceptBlock abgefangen (erster und zweiter Wert).

Hier drucken wir den Namen der Ausnahme mit der exc_info()Funktion im sysModul. Wir können diese aUrsachen ValueErrorund 0Ursachen sehen ZeroDivisionError.

Da jede Ausnahme in Python von der Basisklasse erbt Exception, können wir die obige Aufgabe auch folgendermaßen ausführen:

 # import module sys to get the type of exception import sys randomList = ('a', 0, 2) for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except Exception as e: print("Oops!", e.__class__, "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r)

Dieses Programm hat die gleiche Ausgabe wie das obige Programm.

Abfangen spezifischer Ausnahmen in Python

Im obigen Beispiel haben wir in der exceptKlausel keine spezifische Ausnahme erwähnt .

Dies ist keine gute Programmierpraxis, da alle Ausnahmen erfasst und alle Fälle gleich behandelt werden. Wir können angeben, welche Ausnahmen eine exceptKlausel abfangen soll.

Eine tryKlausel kann eine beliebige Anzahl von exceptKlauseln enthalten, um verschiedene Ausnahmen zu behandeln. Im Falle einer Ausnahme wird jedoch nur eine ausgeführt.

Wir können ein Tupel von Werten verwenden, um mehrere Ausnahmen in einer Ausnahmeklausel anzugeben. Hier ist ein Beispiel für einen Pseudocode.

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

Ausnahmen in Python auslösen

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

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

 >>> raise KeyboardInterrupt Traceback (most recent call last):… KeyboardInterrupt >>> raise MemoryError("This is an argument") Traceback (most recent call last):… MemoryError: This is an argument >>> try:… a = int(input("Enter a positive integer: "))… if a <= 0:… raise ValueError("That is not a positive number!")… except ValueError as ve:… print(ve)… Enter a positive integer: -2 That is not a positive number!

Python versuchen mit else-Klausel

In einigen Situationen möchten Sie möglicherweise einen bestimmten Codeblock ausführen, wenn der darin enthaltene Codeblock tryfehlerfrei ausgeführt wurde. In diesen Fällen können Sie das optionale elseSchlüsselwort mit der tryAnweisung verwenden.

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

Schauen wir uns ein Beispiel an:

 # program to print the reciprocal of even numbers try: num = int(input("Enter a number: ")) assert num % 2 == 0 except: print("Not an even number!") else: reciprocal = 1/num print(reciprocal)

Ausgabe

Wenn wir eine ungerade Zahl übergeben:

 Geben Sie eine Zahl ein: 1 Keine gerade Zahl!

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

 Geben Sie eine Zahl ein: 4 0,25

Wenn wir jedoch 0 übergeben, erhalten wir, ZeroDivisionErrorda der Codeblock im Inneren elsenicht durch Vorgänger behandelt wird except.

 Enter a number: 0 Traceback (most recent call last): File "", line 7, in reciprocal = 1/num ZeroDivisionError: division by zero

Python try… finally

The try statement in Python can have an optional finally clause. This clause is executed no matter what, and is generally used to release external resources.

For example, we may be connected to a remote data center through the network or working with a file or a Graphical User Interface (GUI).

In all these circumstances, we must clean up the resource before the program comes to a halt whether it successfully ran or not. These actions (closing a file, GUI or disconnecting from network) are performed in the finally clause to guarantee the execution.

Here is an example of file operations to illustrate this.

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

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

Interessante Beiträge...