Python – Umgang mit erweiterten Ausnahmen

Sobald eine Ausnahme ausgelöst wird, ist es unsere Pflicht, sie verwalten zu können, damit unser Programm eine Aktion ausführen, eine Meldung auslösen, die Korrektur des vom Benutzer eingegebenen Parameters anfordern kann, und schließlich viele Möglichkeiten.

Ausnahmen erfassen

Wie bereits erwähnt, ist es wichtig, eine Ausnahme auf diese Weise zu erfassen, damit wir entscheiden können, was das Programm tun soll, wenn diese Situation eintritt. Dazu verwenden wir die Befehle try / except. Um dies zu demonstrieren, analysieren wir ein sehr einfaches Divisionsprogramm, da wir wissen, dass wir keine Division einer Zahl zwischen 0 durchführen können. Dies löst also eine Ausnahme aus.

Beginnen wir mit der Erstellung unseres Codes. Denken Sie daran, dass wir dies in jedem Texteditor tun können und die Datei mit der Erweiterung .py speichern müssen, damit wir sie in unserer Befehlszeile oder Konsole ausführen können.

 x = Eingabe ('Geben Sie die erste Zahl ein:') y = Eingabe ('Geben Sie die zweite Zahl ein:') drucke x / y [/ size] [size = 4] 

Dies funktioniert einwandfrei, bis der Benutzer den Wert 0 als zweites Argument eingibt. Dies löst eine Ausnahme aus, wie im folgenden Bild des Programmablaufs zu sehen ist:

Python_Exceptions_Avanz1.jpg

Wir können dies verhindern, indem wir den try / verwenden, außer wir hatten am Anfang dieses Abschnitts gesehen, sehen wir uns unseren korrigierten Code an:

 versuche: x = Eingabe ('Geben Sie die erste Zahl ein:') y = Eingabe ('Geben Sie die zweite Zahl ein:') drucke x / y außer ZeroDivisionerror: print "Die zweite Zahl darf nicht Null sein!" 

Diese Art und Weise, mit diesem Fall umzugehen, ist ziemlich sauber, trotz allem, was wir mit einer einfachen auch darüber reden könnten, wenn der Wert von y nicht 0 eine adäquate Lösung wäre, aber wenn wir unserem Programm mehr Divisionen hinzufügen würden, würden wir es brauchen mehr bedingt, auf diese Weise brauchen wir nur einen einzigen Handler der möglichen generierten Ausnahme.

See also  Wie poste ich eine Frage in Instagram-Geschichten?

Erfassen Sie mehr als eine Ausnahme

Fahren wir mit dem Beispiel der Division fort, an der wir gearbeitet haben, und sehen wir uns an, was passieren würde, wenn wir anstelle einer 0 etwas anderes eingeben:

Python_Exceptions_Avanz2.jpg

Auf dem Bild sehen wir, dass ein Text eingegeben wurde und unser Handler, der nur eine Ausnahme vom Typ ZeroDivisionerror erwartete, keine angemessene Behandlung durchführen konnte, da er nicht wusste, was mit der neuen generierten Ausnahme zu tun war.

Um die neue Ausnahme zu erfassen, fügen wir einfach einen neuen except- Block hinzu, um die TypeError- Ausnahme zu behandeln, die durch die Aufteilung einer Zahl zwischen einem Text generiert wird.

Sehen wir uns unseren korrigierten Code an:

 versuche: x = Eingabe ('Geben Sie die erste Zahl ein:') y = Eingabe ('Geben Sie die zweite Zahl ein:') drucke x / y außer ZeroDivisionerror: print "Die zweite Zahl darf nicht Null sein!" außer TypeError: print "Das war doch keine Zahl, oder?" 

Wenn wir uns für die Verwendung des bedingten Falls entschieden hätten, hätten wir für diese Aufgabe viel mehr Codezeilen benötigt, abgesehen davon, dass unser Programm weniger lesbar wäre.

Erfassen von zwei Ausnahmen im selben Block

Wenn Sie mehrere Ausnahmen in einem einzigen Block erfassen möchten, mit Ausnahme dessen, was Sie in die Anweisung in einer Klammer einfügen müssen, lesen Sie den Code, um ihn besser zu verstehen:

 [/ size] versuche: x = Eingabe ('Geben Sie die erste Zahl ein:') y = Eingabe ('Geben Sie die zweite Zahl ein:') drucke x / y außer ZeroDivisionerror: print "Die zweite Zahl darf nicht Null sein!" außer TypeError: [/ size] [size = 4] print "Das war keine Zahl, oder?" 

Wie wir sehen konnten, sendet uns die Anwendung in jedem Fall dieselbe Nachricht, unabhängig davon, ob eine 0 oder etwas anderes als eine Zahl eingegeben wurde.

See also  So konfigurieren Sie den NTP-Server in CentOS 7 Linux

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *