Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Python

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

  1. Python-Schlüsselwörter und -Identifikatoren
  2. Python-Anweisung, Einrückung und Kommentare
  3. Python-Variablen, -Konstanten und -Literale
  4. Python-Typkonvertierung und Typumwandlung
  5. Python-Eingabe, -Ausgabe und -Import
  6. Python-pass-Anweisung
  7. Python Globale, lokale und nicht lokale Variablen
  8. Python-Verzeichnis- und Dateiverwaltung
  9. Python-Ausnahmebehandlung Mit der try-, except- und finally-Anweisung
  10. Python- und Raspberry Pi-Temperatursensor