Behandeln von Ausnahmen in Python

Es kommt sehr häufig vor, dass während der Ausführung eines Programms Fehler auftreten. Zwei häufige Arten von Fehlern, mit denen Sie möglicherweise umgehen müssen, sind Syntaxfehler und Ausnahmen. Syntaxfehler treten auf, wenn Sie den Code falsch eingeben. In solchen Fällen wird die fehlerhafte Zeile vom Parser wiederholt, wobei ein Pfeil auf die früheste Stelle zeigt, an der der Fehler erkannt wurde.

Ausnahmen unterscheiden sich von Syntaxfehlern. Sie treten während der Ausführung eines Programms auf, wenn etwas Unerwartetes passiert. Angenommen, Sie fordern den Benutzer zur Eingabe einer Nummer auf, um eine Division durchzuführen. Wenn der Benutzer anstelle einer Zahl einen String eingibt und Sie versuchen, eine Zahl durch die angegebene Eingabe zu teilen, gibt das Programm eine aus TypeError

Wenn Sie Ausnahmen nicht ordnungsgemäß behandeln, wird das Programm abrupt beendet, da es in solchen Fällen nicht weiß, was zu tun ist. Der folgende Code ist ein solches Beispiel:

keep_asking = wahr während keep_asking: x = int (Eingabe ("Geben Sie eine Zahl ein:")) print ("50 durch", x teilen, "ergibt:", 50 / x)

Solange Sie einen ganzzahligen Eingabewert eingeben, funktioniert das Programm korrekt. Sobald Sie jedoch einen String oder sogar eine Dezimalzahl als Eingabe eingeben, erhalten Sie eine ValueError Ausnahme.

In diesem Lernprogramm erfahren Sie, wie Sie Ausnahmen in Python richtig behandeln und auslösen.

Einige häufige Ausnahmen

Hier einige grundlegende Ausnahmen, auf die Sie beim Schreiben von Programmen stoßen können. Auf der offiziellen Website finden Sie weitere integrierte Ausnahmen.

  • NameFehler: Diese Ausnahme wird ausgelöst, wenn das Programm keinen lokalen oder globalen Namen findet. Der Name, der nicht gefunden werden konnte, ist in der Fehlermeldung enthalten.
  • TypeError: Diese Ausnahme wird ausgelöst, wenn einer Funktion ein Objekt des ungeeigneten Typs als Argument übergeben wird. Weitere Informationen zum falschen Typ finden Sie in der Fehlermeldung.
  • ValueErrorDiese Ausnahme tritt auf, wenn ein Funktionsargument den richtigen Typ, aber einen ungeeigneten Wert hat. 
  • NotImplementedError: Diese Ausnahme wird ausgelöst, wenn ein Objekt eine Operation unterstützen soll, aber noch nicht implementiert wurde. Sie sollten diesen Fehler nicht verwenden, wenn die angegebene Funktion nicht den Typ des Eingabeargumentes unterstützen soll. In diesen Situationen wird a TypeError Ausnahme ist angemessener.
  • ZeroDivisionErrorDiese Ausnahme wird ausgelöst, wenn Sie das zweite Argument für eine Division oder Modulo-Operation als Null angeben.
  • FileNotFoundError: Diese Ausnahme wird ausgelöst, wenn die vom Programm angeforderte Datei oder das Verzeichnis nicht vorhanden ist.

Wie die Namen oben haben die meisten Ausnahmen selbsterklärende Namen.

Behandlung einer Ausnahme

Der Code am Anfang des Artikels forderte die Benutzer auf, eine Ganzzahl als Eingabe einzugeben. Wenn der Benutzer keine Ganzzahl eingegeben hat, wurde die Ausführung gestoppt und eine Fehlerausnahmebedingung ausgelöst. In diesem Abschnitt schreiben wir etwas Code, um dem Benutzer mitzuteilen, dass seine Eingabe kein gültiger ganzzahliger Wert ist.

Der erste Schritt des Prozesses besteht darin, den Code einzufügen, von dem Sie annehmen, dass er eine Ausnahme in der Versuchen Klausel. Der nächste Schritt ist die Verwendung der außer Schlüsselwort, um die im obigen Code aufgetretene Ausnahme zu behandeln. Der geänderte Code für die Benutzereingabe sieht folgendermaßen aus:

keep_asking = wahr beim keep_asking: try: x = int (Eingabe ("Bitte geben Sie eine Zahl ein")) print ("50 durch", x teilen, "gibt Ihnen:", 50 / x) außer ValueError: print (" Die Eingabe war keine Ganzzahl. Bitte versuchen Sie es noch einmal… ")

Was hier passiert ist, dass das Programm versucht, den Code innerhalb von auszuführen Versuchen Klausel. Wenn keine Ausnahme ausgelöst wurde, überspringt das Programm die außer Klausel und der Rest des Codes wird normal ausgeführt. Wenn eine Ausnahme ausgelöst wird, überspringt das Programm den restlichen Code im Versuchen Klausel und der Typ der Ausnahme wird mit dem Namen der Ausnahme nach dem übereinstimmen außer Stichwort. Im Falle einer Übereinstimmung wird der Code im außer Die Klausel wird zuerst ausgeführt und dann der Rest des Codes nach dem Versuchen Klausel wird normal ausgeführt.

Wenn Sie als Eingabe eine Ganzzahl eingeben, gibt das Programm das Endergebnis der Division aus. Wenn ein nicht ganzzahliger Wert angegeben wird, gibt das Programm eine Meldung aus, in der Sie aufgefordert werden, erneut eine Ganzzahl einzugeben. Beachten Sie, dass das Programm dieses Mal nicht abrupt beendet wird, wenn Sie ungültige Eingaben machen.

Sie können mehrere haben außer Klauseln, um verschiedene Ausnahmen zu behandeln. Bitte beachten Sie, dass diese Handler nur Ausnahmen behandeln, die in den entsprechenden Abschnitten aufgetreten sind Versuchen Klausel. Sie behandeln keine Ausnahmen, die in anderen Ausnahmebehandlern auftreten.

Sie können auch mehrere Ausnahmen mit einer einzigen behandeln außer Klausel durch Übergeben dieser Ausnahmen an die Klausel als Tupel.

außer (ZeroDivisionError, ValueError, TypeError): print ("Etwas ist schiefgegangen ...") # -Code, um die Ausnahme zu behandeln

Schließlich können Sie auch den Namen der Ausnahme nach dem weglassen außer Stichwort. Dies wird im Allgemeinen nicht empfohlen, da der Code jetzt alle Ausnahmen erfasst und auf dieselbe Weise behandelt. Dies ist nicht optimal, da Sie mit a umgehen werden TypeError Ausnahme so, wie Sie mit einem ZeroDivisionError Ausnahme. Bei der Behandlung von Ausnahmen ist es besser, so genau wie möglich zu sein und nur das zu erfassen, was Sie handhaben können.

Eine Möglichkeit, alle Ausnahmen abzufangen, besteht darin, den Ausnahmefehler auf dem Bildschirm wie den folgenden Code richtig auszudrucken:

import math import sys try: result = math.factorial (2.4) mit Ausnahme von print ("Etwas Unerwartetes ist passiert.", sys.exc_info () [0]) else: print ("The factorial is", Ergebnis)

Verwendung der Else-Klausel

Sie können auch eine verwenden sonst Klausel in a versuchen Sie… außer Aussage. Das sonst Klausel soll Code enthalten, der ausgeführt werden muss, wenn der Versuchen Klausel hat keine Ausnahmen gemacht. Dies kann nützlich sein, um sicherzustellen, dass Sie keinen Code hinzufügen Versuchen Blockieren Sie, deren Ausnahmen Sie nicht fangen möchten. Erwähnenswert ist, dass Sie sich entscheiden, eine sonst Klausel, Sie sollten es nach all dem hinzufügen außer Klauseln aber vor dem endlich Block.

In unserem Fall könnten wir die Zeile verschieben, die das Ergebnis unserer Division innerhalb der sonst Block.

keep_asking = True while keep_asking: try: x = int (Eingabe ("Bitte geben Sie eine Zahl ein")) außer ValueError: print ("Die Eingabe war keine gültige Ganzzahl. Bitte versuchen Sie es noch einmal ...") else: print ("Dividing 50") durch ", x" erhalten Sie: ", 50 / x)

Aufräumen mit der Schlussklausel

Nehmen wir an, Sie haben Code in die geschrieben Versuchen Block, der eine Aufgabe ausführen soll, unter Verwendung einer großen Menge an Ressourcen. Es ist wichtig, diese Ressourcen wieder freizugeben, wenn Sie mit ihrer Verwendung fertig sind. Dies kann leicht mit der endlich Klausel. 

Der Code in der endlich Klausel wird immer ausgeführt, unabhängig davon, ob die Versuchen Block hat eine Ausnahme ausgelöst. Sie können dies überprüfen, indem Sie den folgenden Code ausführen:

keep_asking = True while keep_asking: try: x = int (Eingabe ("Bitte geben Sie eine Zahl ein")) außer ValueError: print ("Die Eingabe war keine gültige Ganzzahl. Bitte versuchen Sie es noch einmal ...") else: print ("Dividing 50") durch ", x" wird Sie erhalten: ", 50 / x) Schließlich: print (" Hat schon alles Notwendige getan. ")

Wenn einer der außer Klauseln, die Sie angegeben haben, behandeln die ausgelöste Ausnahme nicht. Dieselbe Ausnahme wird nach der Ausführung von Code innerhalb des Befehls erneut ausgelöst endlich Block.

Ein komplexeres Beispiel

In diesem Abschnitt schreiben wir ein Programm, um mehrere Ausnahmen zu behandeln. Genau wie in den vorherigen Beispielen werden wir einige mathematische Operationen ausführen. Dieses Mal nehmen wir die Eingabe jedoch aus einer Liste.

Der folgende Code prüft auf zwei Ausnahmen, TypeError und ValueError. Das sonst Block wird verwendet, um die Fakultät zu drucken. Sie können in der Ausgabe sehen, dass dieser Code nur ausgeführt wird, wenn keine Ausnahme ausgelöst wird.

import math number_list = [10, -5,1.2, 'apple'] für number in number_list: try: number_factorial = math.factorial (number) mit Ausnahme von TypeError: print ("Factorial wird für den angegebenen Eingabetyp nicht unterstützt.") mit Ausnahme von ValueError : print ("Factorial akzeptiert nur positive Ganzzahlen.", number, "ist keine positive Ganzzahl.") else: print ("Die Fakultät von", number, "ist", number_factorial) Schließlich: print ("Geben Sie beliebige Ressourcen frei in Benutzung.")

Der obige Code erzeugt die folgende Ausgabe:

Die Fakultät von 10 ist 3628800. Alle verwendeten Ressourcen werden freigegeben. Factorial akzeptiert nur positive ganzzahlige Werte. -5 ist keine positive ganze Zahl. Freigeben der verwendeten Ressourcen. Factorial akzeptiert nur positive ganzzahlige Werte. 1.2 ist keine positive ganze Zahl. Freigeben der verwendeten Ressourcen. Factorial wird für den angegebenen Eingabetyp nicht unterstützt. Freigeben der verwendeten Ressourcen.

Bemerkenswert ist auch, dass der Code im endlich Die Klausel wird für jeden Eintrag in der Liste ausgeführt.

Abschließende Gedanken

Ich hoffe, dieses Tutorial hat Ihnen geholfen, die Behandlung von Ausnahmen in Python zu verstehen. Zögern Sie nicht, zu sehen, was wir auf dem Markt zum Verkauf und zum Lernen zur Verfügung haben, und zögern Sie nicht, Fragen zu stellen und mit dem untenstehenden Feed wertvolles Feedback zu geben.

Die korrekte Handhabung von Ausnahmen kann in Situationen sehr hilfreich sein, in denen das Beenden eines Programms nach Erhalt einer unerwarteten Eingabe nicht praktikabel ist. Wenn Sie Fragen zur Ausnahmebehandlung in Python haben, teilen Sie mir dies bitte in den Kommentaren mit. 

Lerne Python

Lernen Sie Python mit unserem kompletten Python-Tutorial, egal ob Sie gerade erst anfangen oder ein erfahrener Programmierer sind, der neue Fähigkeiten erlernen möchte.