Python Exception Handling Using try, except and finally statement

Table of Contents

 

Exceptions 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, stoppt der Python-Interpreter den aktuellen Prozess und übergibt ihn an den aufrufenden Prozess, bis er verarbeitet wird. Bei Nichtbeachtung stürzt das Programm ab.

 

Betrachten wir zum Beispiel ein Programm mit einer Funktion A das ruft funktion auf B ,was wiederum die Funktion aufruft C. Wenn eine Ausnahme in der Funktion auftritt C
wird aber nicht behandelt C, die Ausnahme geht an B und dann zuA.

Bei Nichtbeachtung wird eine Fehlermeldung angezeigt und unser Programm kommt plötzlich unerwartet zum Stillstand.

 


 

Catching Exceptions in Python

 

In Python können Ausnahmen mit a . behandelt werden try anweisung.

Die kritische Operation, die eine Ausnahme auslösen kann, befindet sich im try
Klausel. Der Code, der die Ausnahmen behandelt, ist in der except Klausel.

Wir können somit 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)

 

Output

The entry is a
Oops! <class 'ValueError'> occurred.
Next entry.

The entry is 0
Oops! <class 'ZeroDivisionError'> occured.
Next entry.

The entry is 2
The reciprocal of 2 is 0.5

 

In diesem Programm durchlaufen wir die Werte der randomList Liste. Wie bereits erwähnt, befindet sich der Teil, der eine Ausnahme verursachen kann, innerhalb der try block.

 

Wenn keine Ausnahme auftritt, wird die except Block wird übersprungen und der normale Fluss wird fortgesetzt (für den letzten Wert). Aber wenn eine Ausnahme auftritt, wird sie vom except block (erster und zweiter Wert).

Hier drucken wir den Namen der Ausnahme mit dem exc_info() Funktion im Inneren sys Modul. Wir können das sehen a ursachen ValueError und 0 ursachen ZeroDivisionError.

 

Da jede Ausnahme in Python von der Basis Exception Klasse können wir die obige Aufgabe auch auf folgende Weise durchfü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.

 


 

 

Catching Specific Exceptions in Python

 

Im obigen Beispiel haben wir keine spezielle Ausnahme in der except Klausel.

 

Dies ist keine gute Programmierpraxis, da dadurch alle Ausnahmen abgefangen werden und jeder Fall auf die gleiche Weise behandelt wird. Wir können festlegen, welche Ausnahmen ein except Klausel fangen sollte.

Eine try Klausel kann eine beliebige Anzahl von except Klauseln zur Behandlung verschiedener Ausnahmen, es wird jedoch 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 für 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

 


 

 

Raising Exceptions in Python

 

In der Python-Programmierung werden Exceptions ausgelöst, wenn zur Laufzeit Fehler auftreten. Wir können Ausnahmen auch manuell auslösen, indem wir die raise Stichwort.

Wir können optional 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 try with else clause

 

In manchen Situationen möchten Sie vielleicht einen bestimmten Codeblock ausführen, wenn der Codeblock innerhalb von try lief ohne Fehler. Für diese Fälle können Sie die optionale else Schlüsselwort mit dem try anweisung.

 

Notiz

Ausnahmen in der else-Klausel werden von den vorangehenden except-Klauseln nicht behandelt.

 

Schauen wir uns ein Beispiel an:

#Programm zum Drucken des Kehrwerts gerader Zahlen

try:
    num = int(input("Eingabe einer Nummer: "))
    assert num % 2 == 0
except:
    print("Nicht eine gerade Zahl!")
else:
    reciprocal = 1/num
    print(reciprocal)

 

Output

Wenn wir eine ungerade Zahl übergeben:

Eingabe einer Nummer: 1
Nicht eine gerade Zahl!

 

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

Eingabe einer Nummer: 4
0.25

 

 

Wenn wir jedoch 0 übergeben, erhalten wir ZeroDivisionError als Codeblock im Inneren else wird nicht durch vorangestellte except.

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

 


 

 

Python try…finally

 

Die try Anweisung in Python kann eine optionale finally Klausel. 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 Datenzentrum verbunden sein oder mit einer Datei oder einer grafischen Benutzeroberfläche (GUI) arbeiten.

 

Unter all diesen Umständen müssen wir die Ressource bereinigen, bevor das Programm zum Stillstand kommt, unabhängig davon, ob es erfolgreich gelaufen ist oder nicht. Diese Aktionen (Schließen einer Datei, GUI oder Trennen der Verbindung zum Netzwerk) werden in der finally Klausel, um die Ausführung zu garantieren.

 

Zur Veranschaulichung ist hier ein Beispiel für Dateioperationen aufgeführt.

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.