[Hikari-Python] Kapitel 07-02 Ausnahmebehandlung (Kontinuierliche Ausführung des Programms durch Ausnahmebehandlung)

[Python] Kapitel 07-02 Kontinuierliche Ausführung von Programmen durch Ausnahmebehandlung

Kapitel 07-01 behandelte zwei Ausnahmen. Wie wir im vorherigen Abschnitt gesehen haben, endet das Programm jedoch sofort, wenn eine Ausnahme auftritt. Sie müssen die Verarbeitung dieses Programms fortsetzen oder den Bildschirm darüber informieren, dass eine Ausnahme aufgetreten ist, auch wenn Sie nicht fortfahren können. Dieses Mal werde ich ** Ausnahmebehandlung ** erklären, wenn eine Ausnahme auftritt.

Beschreibung der Ausnahmebehandlung

Wie oben erwähnt, wird der Prozess unterbrochen, wenn eine Ausnahme auftritt. Um es nicht zu unterbrechen, ist es daher notwendig, ** den Prozess durch das an einer anderen Stelle beschriebene Programm auszuführen **. Diese Art der Verarbeitung wird als ** Ausnahmeverarbeitung ** bezeichnet.

Die Ausnahmebehandlung wird grob wie folgt beschrieben.

try:
Wo Sie Ausnahmen behandeln möchten
except:
Wo werden Ausnahmen behandelt?

Lassen Sie uns die Ausnahmebehandlung beschreiben. Erstellen Sie eine Datei mit dem Dateinamen samp07-02-01.py </ font> in chap07 </ font> und geben Sie den folgenden Code ein Bitte schreibe.

samp07-02-01.py


print('Teilen Sie a ÷ b.')

try:
    a = int(input('Geben Sie den Wert von a ein:'))
    b = int(input('Geben Sie einen Wert für b ein:'))
    print(a / b)
except:
    print('Da die Division durch 0 durchgeführt wurde, endet der Prozess.')

[Ausführungsergebnis] </ font> Teilen Sie a ÷ b. Geben Sie einen Wert von a: 10 ein Geben Sie einen Wert für b: 0 ein Da die Division durch 0 durchgeführt wurde, endet der Prozess.

Dieses Mal wird im Block von ** try: ** eine Division durch 0 durchgeführt, sodass eine Ausnahmeverarbeitung erfolgt. Dann springt es zum Block ** außer: ** und die Verarbeitung in diesem Block wird ausgeführt.

In Kapitel 07-01 wurde ** try-catch ** nicht beschrieben, daher wurde der Prozess gewaltsam unterbrochen und eine Fehlermeldung wurde rot angezeigt. Diesmal trat jedoch ein Ausnahmevorgang auf. Daher wurde keine Fehlermeldung ausgegeben.

Auf diese Weise schreiben Sie in Ausnahme die Verarbeitung, wenn eine Ausnahme auftritt. Dieses Mal wurde es von der ** Druckfunktion ** ausgegeben, kann aber beispielsweise für "Benachrichtigen des Überwachungsterminals" und "Erneutes Auffordern der Verarbeitung" verwendet werden.

Bestimmte Ausnahmen

Ich habe ** außer ** früher erwähnt. Dieses Mal wurde unter der Voraussetzung, dass "0 b zugewiesen werden kann", "Da die Division durch 0 durchgeführt wurde, wird die Verarbeitung beendet" in Ausnahme ausgegeben.

Es gibt aber noch andere Ausnahmen. Bei Ausnahme können andere Ausnahmen als die Division durch 0 auftreten. Wenn Sie beispielsweise versehentlich ein Zeichen anstelle eines numerischen Werts eingeben, wird der folgende Fehler ausgegeben. Dies ist das Ausführungsergebnis des vorherigen Programms samp07-02-01.py </ font>.

[Ausführungsergebnis] </ font> Teilen Sie a ÷ b. Geben Sie einen Wert von a: 10 ein Geben Sie einen Wert für b ein: z </ font> Da die Division durch 0 durchgeführt wurde, endet der Prozess.

In diesem Fall ersetzen die Buchstaben ** 'z' ** ** b **. Dies ist keine Ausnahme von der Division durch 0. Dies ist eine Ausnahme von der Tatsache, dass Sie Zeichen dort platzieren, wo Sie normalerweise Zahlen eingeben müssten.

Wenn Sie ** außer ** festlegen, wird daher jede Ausnahme verarbeitet. In diesem Fall müssen zwei "Ausnahmeverarbeitung zur Division durch 0" und "Ausnahmeverarbeitung bei der Eingabe von Zeichen" vorbereitet werden. Jede dieser Ausnahmen ist eine bestimmte, und Sie müssen für jede Ausnahme eine Ausnahmebehandlung durchführen.

Wie Sie anhand der folgenden URL sehen können, gibt es einige spezifische Ausnahmen.

https://docs.python.org/ja/3/library/exceptions.html#concrete-exceptions

Es gibt auch eine Beschreibung auf der obigen Seite, aber dieses Mal ist "Ausnahmebehandlung der Division durch 0" ** ZeroDivisionError , "Ausnahmebehandlung bei der Eingabe von Zeichen" ist ** "Bei der Eingabe von Zeichen". Ausnahmebehandlung " wird verwendet. Erstellen Sie eine Datei mit dem Dateinamen samp07-02-02.py </ font> in chap07 </ font> und geben Sie den folgenden Code ein Bitte schreibe.

samp07-02-02.py


print('Teilen Sie a ÷ b.')

try:
    a = int(input('Geben Sie den Wert von a ein:'))
    b = int(input('Geben Sie einen Wert für b ein:'))
    print(a / b)
except ZeroDivisionError:
#Ausnahmeverarbeitung, die ausgeführt werden soll, wenn der Wert von b auf 0 trifft
    print('Da die Division durch 0 durchgeführt wurde, endet der Prozess.')
except ValueError:
#Ausnahmebehandlung, wenn a oder b keine Zahl ist
    print('Da nicht numerische Daten eingegeben wurden, endet die Verarbeitung.')

[Ausführungsergebnis 1] </ font> Teilen Sie a ÷ b. Geben Sie einen Wert von a: 10 ein Geben Sie einen Wert für b: 0 ein Da die Division durch 0 durchgeführt wurde, endet der Prozess.

[Ausführungsergebnis 2] </ font> Teilen Sie a ÷ b. Geben Sie einen Wert von a: 10 ein Geben Sie einen Wert für b ein: z Da nicht numerische Daten eingegeben wurden, endet die Verarbeitung.

Ich werde den Prozess der Reihe nach verfolgen. In Bezug auf die Ausnahme im Fall der Division durch 0 enthält die obige URL zunächst die folgende Beschreibung.

exception ZeroDivisionError Dies wird gesendet, wenn das zweite Argument der Teilungs- oder Restoperation 0 ist. Der zugehörige Wert ist eine Zeichenfolge, die den Operator und den Operatortyp in der Operation angibt.

Im ersten [Ausführungsergebnis 1] wird 0 als Wert von ** b ** zugewiesen, sodass eine Ausnahme auftritt und die Ausnahmeverarbeitung auf der ZeroDivisionError-Seite ausgeführt wird.

exception ValueError Es wird ausgelöst, wenn ein Operator oder eine Funktion ein Argument des richtigen Typs mit einem falschen Wert empfängt oder in Situationen, in denen es nicht durch eine detailliertere Ausnahme wie IndexError beschrieben werden kann.

In [Ausführungsergebnis 2] wird 'z' als Wert von ** b ** zugewiesen, eine Ausnahme tritt auf, weil keine Division durchgeführt werden kann, und eine Ausnahmeverarbeitung auf der ValueError-Seite wird durchgeführt.

Übungsproblem

Wir haben Übungen vorbereitet. Bitte versuchen Sie es zu lösen. Erstellen Sie das Programm in chap07 </ font>. Sie können einen beliebigen Variablennamen angeben. [1] [Kapitel 07-01](https://qiita.com/ko0821/items/4df28c2d6a2392f9bcb7#%E4%BE%8B%E5%A4%96%E3%83%AA%E3%82%B9%E3 % 83% 88% E3% 81% AE% E8% A6% 81% E7% B4% A0% E3% 82% 92% E8% B6% 85% E3% 81% 88% E3% 81% A6% E6% 8C % 87% E5% AE% 9A% E3% 81% 97% E3% 81% 9F% E5% A0% B4% E5% 90% 88% E3% 81% AE% E4% BE% 8B% E5% A4% 96 ) Geschrieben im folgenden Programm, </ font>

ls = [1, 3, 5, 7, 9]
print(ls)
i = int(input('Bitte geben Sie die Elementnummer in der obigen Liste an:'))

print(ls[i])

Erstellen Sie für <font color = # 3333ff> ein Programm, das die Ausnahmeverarbeitung auslöst, wenn die angegebene Anzahl von Elementen überschritten wird. Erstellen Sie es außerdem nach der Methode mit einer bestimmten Ausnahme. Lassen Sie uns die spezifische Ausnahme unter der obigen URL überprüfen. </ font>

[Ausführungsergebnis] </ font> [1, 3, 5, 7, 9] Bitte geben Sie die Elementnummer in der obigen Liste an: 5 Es wird über die Elemente der Liste hinaus angegeben.

Schließlich

Beachten Sie, dass die Ausnahmebehandlung eine Möglichkeit ist, fehlerresistente Programme zu erstellen. Die Ausnahmebehandlung verursacht keine Fehler im Programm. Tragen Sie sie daher unbedingt, um schwerwiegende Zwischenfälle zu vermeiden. Es wird in Zukunft häufig erscheinen.

Zurück zum [Inhaltsverzeichnis Link]

Recommended Posts