Python-Grundkurs (11 Ausnahmen)

Was sind Ausnahmen?

Wenn der Code einen Fehler enthält und beim [Kompilieren] des Programms ein Fehler auftritt (http://e-words.jp/w/E382B3E383B3E38391E382A4E383AB.html), wird dies als "Kompilierungsfehler" bezeichnet. Selbst wenn die Kompilierung normal abgeschlossen ist und während der Ausführung ein Fehler auftritt, wird dies als [Ausnahme] bezeichnet (http://e-words.jp/w/E4BE8BE5A496.html). In meinem Artikel habe ich das Wort "Fehler" verwendet, um "Ausnahme" auszudrücken, damit die Bedeutung vermittelt werden kann. Von nun an werden wir das richtige Wort "Ausnahme" verwenden.

Die in den vorhergehenden Artikeln eingeführten Ausnahmen waren wie folgt.

Eine weitere bekannte Ausnahme ist der Code, der eine Zahl durch 0 und durch Null teilt.

division_by_zero.py


a = 10 / 0
print("{0}".format(a))

Das obige Programm löst zur Kompilierungszeit keinen Fehler aus, löst jedoch zur Laufzeit eine Ausnahme aus, wie unten gezeigt.

ZeroDivisionError: integer division or modulo by zero

Das Schreiben von "Wenn eine Ausnahme auftritt" in den Code, in dem eine Ausnahme auftreten kann, wird als Ausnahmebehandlung bezeichnet.

Ausnahmen abfangen

Ich möchte nicht, dass das Programm plötzlich beendet wird, während es ausgeführt wird. Ändern Sie daher das oben beschriebene Nullteilungsprogramm so, dass zur Laufzeit keine Ausnahme auftritt.

division_by_zero2.py


try:
    a = 10 / 0
    print("{0}".format(a))
except ZeroDivisionError:
    print("ZeroDivisionError!!")

Fügen Sie den Code, der eine Ausnahme verursachen kann, in ** try: ** ein. Schließen Sie dann die Verarbeitung ein, wenn eine Ausnahme mit ** außer * Ausnahmetyp *: ** auftritt. Der "Ausnahmetyp" muss ein geeigneter sein. Zum Beispiel im obigen Programm anstelle von ZeroDivisionError (= Nullteilungsausnahme) Wenn Sie ValueError (= eine Ausnahme, die einen Wert speichert, der nicht dem Typ der Variablen entspricht) wie unten angegeben angeben, wird die Ausnahme nicht abgefangen.

division_by_zero_EXCEPTION2.py


try:
    a = 10 / 0
    print("{0}".format(a))
except ValueError:
    print("ZeroDivisionError!!")

Ich erhalte eine Ausnahme, wenn ich das obige Programm ausführe.

Verwendung von Informationen zu Ausnahmen

Wenn im vorherigen Programm eine Ausnahme aufgetreten ist, habe ich eine Nachricht erstellt, die ich selbst ausgeben kann. Dies ist verfügbar, da Python Informationen behält, wenn eine Ausnahme auftritt. Versuchen Sie, das folgende Programm auszuführen.

py3.division_by_zero_info.py


try:
    a = 10 / 0
    print("{0}".format(a))
except ZeroDivisionError as e:
    print("type:{0}".format(type(e)))
    print("args:{0}".format(e.args))
    print("message:{0}".format(e.message))
    print("{0}".format(e))

Sie können eine Variable mit Fehlerinformationen definieren, indem Sie ** Ausnahme * Ausnahmetyp * als * Variable *: ** schreiben. Das Ausgabeergebnis ist wie folgt. Möglicherweise möchten Sie diese anstelle Ihrer eigenen Nachrichten ausgeben.

type:<type 'exceptions.ZeroDivisionError'> args:('integer division or modulo by zero',) message:integer division or modulo by zero integer division or modulo by zero

Mehrere Ausnahmen abfangen

Wie bereits erwähnt, muss der "Ausnahmetyp" entsprechend beschrieben werden, es gibt jedoch mehrere Ausnahmemuster. In diesem Fall können Sie mehrere wie das Branch Elif schreiben.

try:
	f = open(file_name,'w')
	data = dict_input['data']
	f.write(data)
	f.close()
except KeyError:
	print('Schlüssel nicht gefunden')
except (FileNotFoundError, TypeError) :
	print('Die Datei konnte nicht geöffnet werden')
except:
	print('Es ist ein Fehler aufgetreten')

Dies ist Teil der Verarbeitung des Programms, das die Datei öffnet, aber die Eingabe und Ausgabe der Datei ist Da dies im "Python-Grundkurs" nicht erklärt wird, entfällt eine ausführliche Code-Erklärung. Schauen Sie sich die Teile ** außer KeyError **, ** außer (FileNotFoundError, TypeError) **, ** außer ** an. Wenn in der try-Klausel eine Ausnahme auftritt, prüft Python zunächst, ob die Ausnahme mit einem KeyError abgefangen werden kann. Wenn möglich, geben Sie "Schlüssel nicht gefunden" aus. Wenn es nicht von KeyError abgefangen werden kann, prüfen Sie, ob es von FileNotFoundError oder TypeError abgefangen werden kann. Ergänzung Wenn möglich, geben Sie "Die Datei konnte nicht geöffnet werden" aus. Auf diese Weise ist es möglich, dieselbe Verarbeitung für mehrere Ausnahmen durchzuführen. Wenn es immer noch nicht fängt, bedeutet die letzte Ausnahme "alle Ausnahmen". Es hat die gleiche Bedeutung wie das Sonst eines Zweigs. Wenn dieser Punkt erreicht ist, wird "Es ist ein Fehler aufgetreten" ausgegeben.

Wenn Sie nur außer vorbereiten: ohne mehrere Ausnahmen zu schreiben, werden alle Ausnahmen abgefangen, aber Wenn Sie alle Ausnahmen mit derselben Ausnahmeklausel abfangen, ist es schwierig, die Ursache der Ausnahme zu verstehen. Es ist eine gute Idee, jeden Ausnahmetyp zu schreiben und dann außer: am Ende zu schreiben.

else/finally Andernfalls wird der Prozess ausgeführt, "wenn der Prozess bis zum Ende fortgesetzt wird, ohne dass eine Ausnahme in der try-Klausel ausgelöst wird". führt schließlich den Prozess "endlich, unabhängig vom Auftreten einer Ausnahme" aus.

try_else_finally.py


try:
    a = 10 / 0
#    a = 10 / 1
    print("{0}".format(a))
except ZeroDivisionError as e:
    print("ZeroDivisionError!!")
else:
    print("else statement")
finally:
    print("finally statement")

Führen Sie das obige Programm aus. Dann kommentiere a = 10/0 und kommentiere a = 10/1 unten aus. Versuchen Sie es erneut und stellen Sie sicher, dass beide Ausgänge wie beschrieben sind.

raise Mit Raise können Sie absichtlich eine Ausnahme auslösen. ** erhöhen ** * Beschreiben Sie die Ausnahme, die Sie auslösen möchten (Ausnahme, die Sie senden möchten) * an der Stelle, an der Sie die Ausnahme auslösen möchten. Geben Sie eine Ausnahme zurück, indem Sie eine Erhöhung in die Ausnahmeklausel schreiben. Kommentieren Sie nach dem Ausführen des folgenden Programms die Erhöhung in der Ausnahmeklausel aus und überprüfen Sie den Unterschied in der Funktionsweise zwischen den beiden.

raise.py


try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')
    raise

Damit ist die Erklärung der Ausnahme abgeschlossen.

Weiter: Python-Grundkurs (12 Funktionen)

Recommended Posts

Python-Grundkurs (11 Ausnahmen)
Python-Grundkurs (12 Funktionen)
Python-Grundkurs (7 Wörterbuch)
Python-Grundkurs (2 Python-Installation)
Python-Grundkurs (9 Iterationen)
Python-Grundkurs (6 Sätze)
Python-Grundkurs (Einführung)
Python-Grundkurs (13 Klassen)
Python-Grundkurs (8 Zweige)
Python-Grundkurs (3 Ausführung von Python)
Python-Grundkurs (10 Einschlussnotation)
Python-Grundkurs (5 List Taple)
Python-Grundkurs (1 Was ist Python?)
Python-Grundkurs (14 Module und Pakete)
RF Python Basic_01
Python-Grundschrift
Grundlegende Grammatik von Python3
RF Python Basic_02
Python-Grundkurs (Ende 15)
Python-Grundkurs (4 numerische Typen / Zeichenfolgen)
Python Memo Basic Edition
Grundlegende Sortierung in Python
Grundmethode der [Python] -Klasse
Python3 Spickzettel (Basic)
Python-Grundgrammatik (Sonstiges)
Python Basic Memorandum Teil 2
Python Basic ② in Windows
Python-Grundnotiz - Teil 2
Grundlegende Python-Befehlsnotizen
Grundkenntnisse in Python
Python grundlegende Grammatik Memo
Python-Grundnotiz - Teil 1
Python Memorandum Super Basic
Python grundlegende if-Anweisung
Python Basic - Pandas, Numpy -
Grundlegende Grammatik des Python3-Systems (einige Iterationen von Python)
Python-Anwendung: Pandas Teil 1: Basic
Mit Python erlerntes Refactoring (Basic)
BASIC-Authentifizierung mit Python-Flasche
Python Basic Dikt Sortierreihenfolge
[Python] Verwenden von OpenCV mit Python (Basic)
Python-Installation und grundlegende Grammatik
Python-Grammatik-Grundnotiz (1)
Python-Grundgrammatik (Verschiedenes) Memo (3)
Python-Grundgrammatik (Verschiedenes) Memo (2)
Grundlegende Python-Grammatik für Anfänger
[Python] [SQLite3] Betreiben Sie SQLite mit Python (Basic)
Grundlegende Verwendung von Python-F-String
Ich habe die grundlegende Python-Grammatik gelernt
Python-Grundgrammatik (Verschiedenes) Memo (4)
Python (Python 3.7.7) Installation und grundlegende Grammatik
Vergleich der grundlegenden Grammatik zwischen Java und Python
Python
Scraping mit Selen in Python (Basic)
Python-Kurs für datenwissenschaftlich-nützliche Techniken
[Python] Grundkenntnisse in AtCoder
Typ in Python angegeben. Ausnahmen auslösen