Python Tutorial - Ausnahmebehandlung
Sie werden in diesem Abschnitt lernen, wie man Python-Ausnahmen behandelt. Weiterhin lernen Sie, wie Sie Ausnahmen auslösen und abfangen können.
Wenn eine Ausnahme in einem Programm auftritt, wird die Programmausführung abgebrochen. Meistens bevorzugen Sie jedoch nicht die anormale Beendigung des Programms, daher können Sie die Python-Ausnahmebehandlung verwenden, um einen Absturz Ihres Programms zu vermeiden.
try...except
Im folgenden Beispiel wird der Benutzer aufgefordert, 10 ganze Zahlen einzugeben. Wenn der Benutzer einen anderen Typ als Ganzzahlen eingibt, wird eine Ausnahme geworfen und Anweisungen im except
block ausgeführt:
>>> n = 10
>>> i = 1
>>> sum = 0
>>> while i <= n:
try:
num = int(input('Enter a number: '))
sum = sum + num
i = i+1
except:
print('Please enter an integer!!')
break
Enter a number: 23
Enter a number: 12
Enter a number: Asd
Please enter an integer!!
>>> print('Sum of numbers =', sum)
Sum of numbers = 35
Sie können auch bestimmte Ausnahmen abfangen, z.B. wenn eine Division durch Null stattfindet, können Sie die entsprechende Ausnahme als abfangen:
try:
# statements
except ZeroDivisionError:
# exception handling
except:
# all other exceptions are handled here
raise
Exception
Sie können eine bestimmte Ausnahme erzwingen, indem Sie das Schlüsselwort raise
verwenden:
>>> raise ZeroDivisionError
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
raise ZeroDivisionError
ZeroDivisionError
>>> raise ValueError
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
raise ValueError
ValueError
Wenn Sie einige angepasste Informationen zu der selbstausgelösten Ausnahme hinzufügen müssen, könnten Sie diese in der Klammer nach dem Fehlertyp der Ausnahme hinzufügen.
>>> raise NameError("This is a customized exception")
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
raise NameError("This is a customized exception")
NameError: This is a customized exception
try...finally
Der finally
Block ist optional im except
Block. Wenn es einen finally
Block gibt, wird er in jedem Fall ausgeführt.
Dies wird im folgenden Beispiel demonstriert:
>>> try:
raise ValueError
finally:
print('You are in finally block')
You are in finally block
Traceback (most recent call last):
File "<pyshell#23>", line 2, in <module>
raise ValueError
ValueError
Der try...finally
-Block wird für die Aufräumarbeiten verwendet, z.B. wenn Sie mit einer Datei arbeiten, ist es eine gute Praxis, die Datei zu schließen. So wird die Datei im finally
-Block geschlossen.
Python eingebaute Ausnahmen
In diesem Abschnitt lernen Sie die Standardausnahmen in der Python-Programmierung kennen.
Ausnahmen sind die Laufzeitfehler, die bei der Interpretation ausgelöst werden. Zum Beispiel erzeugt die Division einer beliebigen Zahl durch Null einen Laufzeitfehler namens ZeroDivisionError
.
In Python gibt es einige eingebaute Ausnahmen, die im Folgenden beschrieben werden:
Ausnahme | Wenn sie angehoben wird? |
---|---|
AssertionError |
wenn die Assert -Anweisung fehlgeschlagen ist |
AttributeError |
wenn die Attribut -Referenz fehlschlägt |
EOFError |
wenn keine Daten von den input() Funktionen gelesen werden und das Ende der Datei erreicht ist. |
FloatingPointError |
wenn die Fließkommaberechnung fehlgeschlagen ist |
Generator-Exit |
Wenn eine Coroutine oder ein Generator geschlossen wird, tritt die Ausnahme GeneratorExit auf |
ImportError |
wenn Import das Modul nicht finden kann |
ModulNotFoundError |
wenn das Modul nicht durch Import gefunden wird. Diese Ausnahme ist eine Unterklasse von ImportError . |
IndexError |
wenn der Index einer Sequenz nicht in Reichweite ist. |
KeyError |
wenn ein Dictionarieschlüssel nicht im Dictionary gefunden wird |
KeyboardInterrupt |
wenn eine Unterbrechungstaste gedrückt wird. |
MemoryError |
wenn für eine bestimmte Operation weniger Speicherplatz zur Verfügung steht |
NameFehler |
wenn eine Variable nicht gefunden wird |
NotImplementedError |
wenn die Implementierung der abstrakten Methode benötigt, aber nicht bereitgestellt wird. |
OSError |
wenn ein Systemfehler auftritt |
OverFlowError |
wenn ein Wert zu groß ist, um dargestellt zu werden. |
Rekursionsfehler |
wenn die Rekursionsgrenze die maximale Anzahl überschreitet |
Einrückungsfehler |
wenn die Einrückung für die Definition einer Funktion, Klasse usw. richtig spezifiziert ist. |
SystemError |
wenn ein systembedingter Fehler gefunden wird |
System-Exit |
wenn sys.exit() verwendet wird, um den Interpreter zu beenden. |
TypeError |
wenn eine Operation für den angegebenen Datentyp ungültig ist |
ValueError |
wenn eine eingebaute Funktion gültige Argumente hat, aber die angegebenen Werte nicht gültig sind. |
RunTimeError |
wenn der erzeugte Fehler in keine andere Kategorie fällt |
IOError |
wenn eine E/A-Operation fehlgeschlagen ist. |
UnBoundLocalError |
wenn auf die lokale Variable zugegriffen wird, diese aber keinen Wert hat |
SyntaxError |
wenn ein Syntaxfehler vorliegt |
TabError |
wenn es eine unnötige Tabulatoreinrückung gibt |
UnicodeError |
wenn ein Unicode-bezogener Fehler auftritt |
UnicodeEncodeError |
wenn ein Unicode-bezogener Fehler aufgrund der Kodierung auftritt |
UnicodeDecodeError |
wenn ein Unicode-bezogener Fehler aufgrund der Dekodierung auftritt |
UnicodeTranslateError |
wenn ein Unicode-bezogener Fehler wegen der Übersetzung auftritt |
ZeroDivisionError |
wenn eine Zahl durch Null geteilt wird |
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook