Python-Ausnahmebehandlung Mit der try-, except- und finally-Anweisung
Python-Ausnahmebehandlung mit der Anweisung „try“, „außer“ und „finally“
In diesem Tutorial erfahren Sie anhand von Beispielen, wie Sie Ausnahmen in Ihrem Python-Programm mit try-, except- und finally-Anweisungen behandeln.
Video:Python-Ausnahmebehandlung (versuchen Sie ... außer ... endlich)
Ausnahmen in Python
Python hat viele eingebaute Ausnahmen, die ausgelöst werden, wenn Ihr Programm auf einen Fehler trifft (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 behandelt wird. Andernfalls 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 eine Ausnahme in Funktion C
auftritt wird aber nicht in C
behandelt , wird die Ausnahme an B
übergeben und dann zu A
.
Wenn es nie behandelt wird, wird eine Fehlermeldung angezeigt und unser Programm kommt zu einem plötzlichen unerwarteten Halt.
Abfangen von Ausnahmen in Python
In Python können Ausnahmen mit einem try
behandelt werden Erklärung.
Die kritische Operation, die eine Ausnahme auslösen kann, wird innerhalb von try
platziert Klausel. Der Code, der die Ausnahmen behandelt, ist in except
geschrieben Klausel.
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
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 aufführen. Wie bereits erwähnt, wird der Teil, der eine Ausnahme verursachen kann, innerhalb von try
platziert blockieren.
Wenn keine Ausnahme auftritt, wird der except
Block wird übersprungen und der normale Ablauf wird fortgesetzt (für den letzten Wert). Aber wenn eine Ausnahme auftritt, wird sie von except
abgefangen Block (erster und zweiter Wert).
Hier geben wir den Namen der Ausnahme mit dem exc_info()
aus Funktion in sys
Modul. Wir können diesen a
sehen verursacht ValueError
und 0
verursacht ZeroDivisionError
.
Da jede Ausnahme in Python von der Basis Exception
erbt Klasse können wir die obige Aufgabe auch auf folgende Weise 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 bestimmter Ausnahmen in Python
Im obigen Beispiel haben wir keine spezifische Ausnahme in except
erwähnt Klausel.
Dies ist keine gute Programmierpraxis, da es alle Ausnahmen abfängt und jeden Fall auf die gleiche Weise behandelt. Wir können angeben, welche Ausnahmen ein except
sind Klausel sollte fangen.
Ein try
-Klausel kann eine beliebige Anzahl von except
haben Klauseln zur Behandlung verschiedener Ausnahmen, es wird jedoch nur eine ausgeführt, falls 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
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 Fehler zur Laufzeit auftreten. Wir können Ausnahmen auch manuell mit raise
auslösen Schlüsselwort.
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-Versuch mit else-Klausel
In einigen Situationen möchten Sie möglicherweise einen bestimmten Codeblock ausführen, wenn der Codeblock innerhalb von try
liegt lief ohne Fehler. Für diese Fälle können Sie den optionalen else
verwenden Schlüsselwort mit dem try
Erklärung.
Hinweis :Ausnahmen in der Else-Klausel werden nicht von den vorangehenden Except-Klauseln behandelt.
Sehen 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:
Enter a number: 1 Not an even number!
Wenn wir eine gerade Zahl übergeben, wird der Kehrwert berechnet und angezeigt.
Enter a number: 4 0.25
Wenn wir jedoch 0 übergeben, erhalten wir ZeroDivisionError
als Codeblock in else
wird nicht durch vorangestelltes except
behandelt .
Enter a number: 0 Traceback (most recent call last): File "<string>", line 7, in <module> reciprocal = 1/num ZeroDivisionError: division by zero
Python-Versuch ... endlich
Der try
-Anweisung in Python kann einen optionalen finally
haben Klausel. Diese Klausel wird in jedem Fall ausgeführt und dient im Allgemeinen dazu, externe Ressourcen freizugeben.
Beispielsweise können wir über das Netzwerk mit einem entfernten Rechenzentrum 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 anhält, unabhängig davon, ob es erfolgreich ausgeführt wurde oder nicht. Diese Aktionen (Schließen einer Datei, GUI oder Trennen vom Netzwerk) werden in finally
ausgeführt Klausel zur Gewährleistung der Ausführung.
Hier ist ein Beispiel für Dateioperationen, um dies zu veranschaulichen.
try:
f = open("test.txt",encoding = 'utf-8')
# perform file operations
finally:
f.close()
Diese Art von Konstrukt stellt sicher, dass die Datei auch dann geschlossen wird, wenn während der Programmausführung eine Ausnahme auftritt.
Python
- Python-Schlüsselwörter und -Identifikatoren
- Python-Anweisung, Einrückung und Kommentare
- Python-Variablen, -Konstanten und -Literale
- Python-Typkonvertierung und Typumwandlung
- Python-Eingabe, -Ausgabe und -Import
- Python-pass-Anweisung
- Python Globale, lokale und nicht lokale Variablen
- Python-Verzeichnis- und Dateiverwaltung
- Python-Ausnahmebehandlung Mit der try-, except- und finally-Anweisung
- Python- und Raspberry Pi-Temperatursensor