Heute werde ich über ** Fehler ** erklären. Es ist ein rudimentärer Inhalt, aber es ist in Ordnung, einen Fehler try ~ außer
zu schreiben, oder? Wenn ja, beziehen Sie sich bitte darauf. Auch wenn es einen Fehler in der Erklärung gibt, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten.
Übrigens werden die in Python auftretenden Fehler grob in zwei Typen unterteilt. Syntaxfehler </ font> und Ausnahme </ font>.
Dies geschieht, wenn Sie feststellen können, dass Sie falsch liegen, bevor Sie das Programm ausführen. Ein Fehler, der auftritt, wenn Sie einen Variablennamen verwenden, der nicht den Bezeichnerregeln entspricht, der Einzug falsch ist oder die Syntax ohnehin falsch ist. Schreiben Sie "a [0]" als "a [0}", schreiben Sie "if" als "von" ... (Haben Sie das getan? Ich habe ...) Ich kann Ihnen kein Beispiel geben. Hmm. Einfach ausgedrückt sind Syntaxfehler grammatikalische Fehler, die mit dem Schreiben von Programmen abnehmen. Ich werde vorerst ein Beispiel schreiben lol
#Beispiele für Syntaxfehler
a = [1, 2, 3]
print(a[3})
Ausgabe
print(a[3})
^
SyntaxError: invalid syntax
Dies ist ein Fehler, der auftritt, wenn der Computer (Interpreter?) Beim Ausführen des Programms feststellt, dass dies nicht möglich ist. In einem einfachen Beispiel
a = [1, 2, 3]
print(a[3])
Ausgabe
1 a = [1, 2, 3]
----> 2 print(a[3])
IndexError: list index out of range
Da die Elemente des Arrays nur bis zur Indexnummer 2 existieren, tritt natürlich eine Ausnahme auf, wenn versucht wird, "a [3]" auszugeben. Ich habe hier "IndexError" als Beispiel für eine Ausnahme gezeigt, aber es gibt noch viele weitere.
Wenn Sie jetzt ein Programm ausführen, möchten Sie möglicherweise die Verarbeitung fortsetzen, auch wenn eine Ausnahme auftritt. Verwenden Sie in diesem Fall das bekannte "try ~ Except". Verhindern wir, dass das Programm gestoppt wird, auch wenn "ZeroDivisionError" aufgrund der Ausnahmebehandlung angezeigt wird.
a = 1
b = 0
try:
print(a/b)
except ZeroDivisionError:
print('Du kannst es nicht durch 0 teilen, oder? Ich habe einen ZeroDivisionError')
finally:
print('Teilen ist schwierig')
Ausgabe
Du kannst es nicht durch 0 teilen, oder? Ich habe einen ZeroDivisionError
Teilen ist schwierig
Sie können nach der letzten Bereinigung "endlich" hinzufügen, wie im obigen Beispiel. Dies wird zuletzt ausgeführt, unabhängig davon, ob eine Ausnahme auftritt oder nicht, bei der die Verarbeitung unterbrochen und beendet wird.
"Ausnahme" kann so angegeben werden, dass der Taple mehrere Ausnahmen wie folgt abfangen kann:
try:
a = int(input('a = '))
b = int(input('b = '))
print(a/b)
except (ValueError, ZeroDivisionError):
print('Ich erhalte einen Wertefehler oder einen Nullteilungsfehler')
Ausgabe 1
a = 1.5
Ich erhalte einen Wertefehler oder einen Nullteilungsfehler
Ausgabe 2
a = 1
b = 0
Ich erhalte einen Wertefehler oder einen Nullteilungsfehler
Darüber hinaus können Sie die auftretende Ausnahme benennen. Im Folgenden tippe ich, um einen "ValueError" oder "ZeroDivisionError" auszulösen, aber ich fange die aufgetretene Ausnahme ab und nenne sie "ER".
try:
a = int(input('a = '))
b = int(input('b = '))
print(a/b)
except (ValueError, ZeroDivisionError) as ER:
print(f'{type(ER)}Es passiert')
Ausgabe 1
a = 1.5
<class 'ValueError'>Es passiert
Ausgabe 2
a = 1
b = 0
<class 'ZeroDivisionError'>Es passiert
Bitte beachten Sie, dass der Name "ER" nur in der "außer" Suite verwendet werden kann. Wenn Sie Folgendes tun, wird "NameError" auftreten (da es eine große Sache ist, lassen Sie uns auch diesen "NameError" abfangen).
try:
a = int(input('a = '))
b = int(input('b = '))
print(a/b)
except (ValueError, ZeroDivisionError) as ER:
pass
try:
print(ER)
except NameError:
print('Was ist Notaufnahme?')
Ausgabe
a = 1.5
Was ist Notaufnahme?
Sie können auch absichtlich eine Ausnahme mit "erhöhen" auslösen. Sie können hier jedoch nur Unterklassen oder Instanzen der BaseException-Klasse verwenden. (Wie wir später sehen werden, sind die meisten häufigen Ausnahmen Unterklassen dieser BaseException
.)
def ErFunc(b: int) -> None:
if b == 0:
raise ZeroDivisionError
b = 0
try:
ErFunc(b)
except BaseException as ER:
print(f'{type(ER)}Tritt auf')
Ausgabe
<class 'ZeroDivisionError'>Tritt auf
Da hier die BaseException-Klasse angegeben ist, kann jede abgeleitete Klasse abgefangen werden. Hier wird der ZeroDivisionError
abgefangen.
Schließlich können Sie auch Klassen verwenden, um benutzerdefinierte Ausnahmeklassen zu erstellen. Das folgende Programm ermittelt die Summe zweier einstelliger natürlicher Zahlen, löst jedoch eine Ausnahme aus, wenn eine negative Zahl oder eine zweistellige Zahl eingegeben wird oder wenn die Summe zweistellig wird. Sowohl die Klasse "ParameterRangeException" als auch die Klasse "ReturnRangeException" sind bereichsbezogene Klassen, daher erben sie von der Klasse "RangeException". Natürlich ist es in Ordnung, von der integrierten Standardklasse "Exception" zu erben.
class RangeException(Exception):
pass
class ParameterRangeException(RangeException):
pass
class ReturnRangeException(RangeException):
pass
def add(a: int, b: int) -> int:
if not 0 < a < 10:
raise ParameterRangeException
if not 0 < b < 10:
raise ParameterRangeException
if a + b > 10:
raise ReturnRangeException
else:
return a + b
try:
a = int(input())
b = int(input())
print(f'Die Summe der beiden Zahlen{add(a, b)}Deshi')
except ParameterRangeException as PRE:
print(f'{type(PRE)}Tritt auf. Formales Argument ist 1~Es muss 9 sein')
except ReturnRangeException as RRE:
print(f'{type(RRE)}Tritt auf. Ich muss den Rückgabewert 9 oder weniger machen')
finally:
print('Das ist alles für die Ausnahme')
Ausgabe 1
1
8
Die Summe der beiden Zahlen ist 9
Das ist alles für die Ausnahme
Ausgabe 2
2
11
<class '__main__.ParameterRangeException'>Tritt auf. Formales Argument ist 1~Es muss 9 sein
Das ist alles für die Ausnahme
Ausgabe 3
5
7
<class '__main__.ReturnRangeException'>Tritt auf. Ich muss den Rückgabewert 9 oder weniger machen
Das ist alles für die Ausnahme
Die übergeordnete Klasse für integrierte Standardausnahmen, die von Python bereitgestellt werden, ist die BaseException-Klasse. Mit diesem übergeordneten Element gibt es eine "Exception" -Klasse, und die "ValueError" -Klasse und die "IndexError" -Klasse existieren in Form der Vererbung dieser Klasse.
Wenn Sie eine benutzerdefinierte Ausnahme erstellen, setzen Sie "BaseException" nicht in das Argument "UserExceptionClass ()". Die BaseException-Klasse scheint nicht davon auszugehen, dass sie von benutzerdefinierten Ausnahmen geerbt wird.
Es gibt eine "ArithmeticError" -Klasse als untergeordnete Klasse der "BaseException" -Klasse, aber unter dieser Klasse befinden sich die Klassen "OverflowError" und "ZeroDivisionError". Wenn Sie arithmetische Fehler behandeln möchten, können Sie beim Erstellen einer benutzerdefinierten Ausnahme "ArithmeticError" in das Argument einfügen (jede Klasse unter der Klasse "Exception" ist in Ordnung).
Recommended Posts