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.
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.
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
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