[PYTHON] Fangen Sie mehrere Arten von Ausnahmen ab

1


import sys, traceback

number1 = 100
number2 = 'a'

print('strat')

try:
    answer = number1 / number2
    print(answer)
except ZeroDivisionError as e:
    print('Es wird nicht bei 0 brechen.')
    sys.stderr.write(traceback.format_exc())
except NameError as e:
    print('Aufruf einer undefinierten Variablen')
    sys.stderr.write(traceback.format_exc())
except Exception as e:
    print('Ein unerwarteter Fehler ist aufgetreten.')
    sys.stderr.write(traceback.format_exc())
finally:
    print('end')

Ausführungsergebnis von 1


strat
Ein unerwarteter Fehler ist aufgetreten.
end

1 Laufzeitfehler


Traceback (most recent call last):
  File "Main.py", line 9, in <module>
    answer = number1 / number2
TypeError: unsupported operand type(s) for /: 'int' and 'str'

Da number2 = 'a', TypeError ist aufgetreten.

TypeError ist except ZeroDivisionError、 Es kann nur von NameError erfasst werden. Kann mit Ausnahme von Ausnahme gefangen werden.

Ausnahme ist eine Oberklasse von ZeroDivisionError und NameError. Um es anders herum auszudrücken Es ist eine Unterklasse von ZeroDivisionError und NameError.

Ausnahme kann alle Ausnahmen abfangen, Unterklassen sind eine spezifischere Ausnahme.

Beim Abfangen mehrerer Ausnahmen Es wird geprüft, ob es einen entsprechenden Ausnahmeblock in der Reihenfolge von oben gibt. Aus diesem Grund, Es ist notwendig, aus einer spezifischeren Unterklasse zu schreiben.

Andernfalls, Der Block Except Exception, der alle Ausnahmen abfängt Bevor sich die Unterklassen, die Ausnahmen abfangen können, genauer bewegen Es fängt eine Ausnahme ab.

2


import sys,traceback

number1 = 100
number2 = 0

print('start')

try:
    answer = number1 / number2
    print(answer)
except Exception as e:
    print('Eine unerwartete Ausnahme ist aufgetreten.')
    sys.stderr.write(traceback.format_exc())
except ZeroDivisionError as e:
    print('Es wird nicht bei 0 brechen.')
    sys.stderr.write(traceback.format_exc())
except NameError as e:
    print('Sie haben eine undefinierte Variable aufgerufen.')
    sys.stderr.write(traceback.format_exc())
finally:
    print('end')

Ausführungsergebnis von 2


strat
Ein unerwarteter Fehler ist aufgetreten.
end

2 Laufzeitfehler


Traceback (most recent call last):
  File "Main.py", line 9, in <module>
    answer = number1 / number2
ZeroDivisionError: division by zero

Ich wollte "0 bricht nicht" ausgeben, aber Weil die Superklasse-Ausnahme jede Ausnahme abfängt Der Block Except Exception hat eine Ausnahme abgefangen.

Recommended Posts

Fangen Sie mehrere Arten von Ausnahmen ab
Überprüfung der Ausnahmen
Mehrfachvererbung von Klassen
Kopie mehrerer Listen
Arten der Kommunikation zwischen Prozessen
Rache der Typen: Rache der Typen
Summe mehrerer Numpy-Arrays (Summe)
Zusammenfassung der Linux-Verteilungstypen
Optimale Platzierung mehrerer Bilder
Installieren Sie mehrere Versionen von Python
[ev3dev × Python] Steuerung mehrerer Motoren
Ich habe 11 Arten von Betriebssystemen zusammengefasst
django-allauth verwaltet mehrere Benutzertypen mithilfe des benutzerdefinierten Benutzers (Benutzer mit mehreren Typen).