English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python-Basisanleitung

Python-Flusssteuerung

Python Funktion

Python Datentypen

Dateioperationen in Python

Python-Objekte und Klassen

Python-Daten und Zeit

Erweiterte Kenntnisse in Python

Python-Referenzhandbuch

Python-Fehlerbehandlung - Try, Except und finally

In diesem Artikel werden Sie erfahren, wie Sie Ausnahmen in Python-Programmen mit den Anweisungen try, except und finally behandeln. Dies wird Sie dazu ermutigen, saubere, lesbare und effiziente Code in Python zu schreiben.

Was sind Ausnahmen in Python?

Python hat vieleEingebaute Ausnahmen  , wenn einige Fehler auftreten, zwingen sie Ihr Programm, Fehler auszugeben.

Wenn diese Ausnahmen auftreten, führt sie dazu, dass der aktuelle Prozess stoppt und sie an den aufrufenden Prozess weitergibt, bis sie bearbeitet werden. Ohne Verarbeitung wird unser Programm abstürzen.

Zum Beispiel, wenn Funktion A Funktion B aufruft, die wiederum Funktion C aufruft, und in Funktion C eine Ausnahme auftritt. Wenn die Ausnahme in C nicht behandelt wird, wird sie an B und dann an A weitergegeben.

Ohne Verarbeitung wird eine Fehlermeldung ausgelöst, und unser Programm wird unerwartet abrupt abbrechen.

In Python Ausnahmen fangen

In Python kann mit dem try-Befehl eine Ausnahme behandelt werden.

Schlüsseloperationen, die Ausnahmen verursachen können, werden in einem try-Block platziert, und der Code zur Ausnahmebehandlung wird in einem except-Block geschrieben.

Nachdem eine Ausnahme erfasst wurde, hängt die von uns durchzuführende Aktion davon ab, was wir selbst entscheiden. Dies ist ein einfaches Beispiel.

# Modul sys importieren, um den Typ der Ausnahme zu erhalten
import sys
randomList = [‘a’, 0, 2]
for entry in randomList:
    try:
        print(‘Der Eintrag ist’, entry)
        r = 1/int(entry)
        break
    except:
        print(‘Oops!’, sys.exc_info()[0], ‘aufgetreten.’)
        print(‘Nächster Eintrag.’)
        print()
print(‘Der umgekehrte Wert von’, entry, ‘ist’, r)

Ausgabenergebnis

Der Eintrag ist a
Oops! <class 'ValueError'> aufgetreten.
Nächster Eintrag.
Der Eintrag ist 0
Oops! <class 'ZeroDivisionError'> aufgetreten.
Nächster Eintrag.
Der Eintrag ist 2
Der umgekehrte Wert von 2 ist 0.5

In diesem Programm wird im Zyklus bis zum Eintreten einer gültigen Umkehrzahl des Benutzers fortgegangen. Der Teil, der möglicherweise eine Ausnahme verursacht, wird im try-Block platziert.

Wenn keine Ausnahme auftritt, wird der Inhalt außerhalb des except-Blocks übersprungen und der normale Ablauf fortgesetzt. Wenn jedoch eine Ausnahme auftritt, wird sie vom except-Block erfasst.

Hier verwenden wir die Funktion exinfo() aus dem sys-Modul, um den Namen der Ausnahme anzuzeigen und den Benutzer dazu aufzufordern, es noch einmal zu versuchen. Wir können sehen, dass der Wert ‘a’ und ‘1.3’Verursacht ValueError, ‘0’ verursacht ZeroDivisionError.

Spezifische Ausnahmen in Python erfassen

Im obigen Beispiel wurde in dem except-Teil keine Ausnahme erwähnt.

Dies ist keine gute Programmierpraxis, da alle Ausnahmen auf gleiche Weise erfasst und behandelt werden. Wir können spezifizieren, welche Ausnahmen ein except-Teil erfassen soll.

Ein try-Teil kann eine beliebige Anzahl von except-Teilen haben, um sie auf verschiedene Weise zu behandeln, aber nur ein except-Teil wird bei Auftreten einer Ausnahme ausgeführt.

Wir können Tupel von Werten in den except-Teil verwenden, um mehrere Ausnahmen zu spezifizieren. Hier ist ein Pseudocode-Beispiel.

try:
   Ausführung bestimmter Codes
   pass
except ValueError:
   Fehlerbehandlung von ValueError-Ausnahmen
   pass
except (TypeError, ZeroDivisionError):
   Fehlerbehandlung mehrerer Ausnahmen
   Fehler # TypeError und ZeroDivisionError
   pass
except:
   # Verarbeiten aller anderen Ausnahmen
   pass

Ausnahme auslösen

In der Python-Programmierung werden Ausnahmen bei Auftreten der entsprechenden Fehler während der Laufzeit ausgelöst, aber wir können den Schlüssel raise verwenden, um eine Ausnahme explizit auszulösen.

Wir können auch den Wert an die Ausnahme übergeben, um zu erläutern, warum die Ausnahme ausgelöst wurde.

>>> raise KeyboardInterrupt
Traceback (letzte aufrufende Funktion):
...
KeyboardInterrupt
>>> raise MemoryError("Dies ist ein Argument")
Traceback (letzte aufrufende Funktion):
...
MemoryError: Dies ist ein Argument
>>> try:
...        a = int(input("Geben Sie eine positive Ganzzahl ein: "))
...        if a <= 0:
...        raise ValueError("Dies ist keine positive Zahl!")
...    except ValueError as ve:
...    print(ve)
...    
Geben Sie eine positive Ganzzahl ein: -2
Dies ist keine positive Zahl!

try...finally

Der try-Anweisung in Python kann ein optionales finally-Klausel hinzugefügt werden. Diese Klausel wird in jedem Fall ausgeführt und wird normalerweise verwendet, um externe Ressourcen freizugeben.

Beispielsweise können wir über eine Netzwerkverbindung auf einen Remote-Datenzentrum zugreifen oder Dateien oder GUI (Graphische Benutzeroberfläche) verwenden.

In allen diesen Fällen müssen wir die Ressourcen, ob sie erfolgreich waren oder nicht, bereinigen. Diese Operationen (Datei schließen, GUI oder Verbindungen mit dem Netzwerk trennen) werden im finally-Teil ausgeführt, um sicherzustellen, dass sie ausgeführt werden.

Dies ist eineDateioperationenDieses Beispiel zeigt dies.

try:
   f = open("test.txt", encoding = 'utf-8)
   # Ausführung von Dateioperationen
finally:
   f.close()

Dieser Typ der Konstruktion stellt sicher, dass die Datei auch im Falle eines Ausnahmevorkommens geschlossen wird.