Python Tutorial - Ausnahmebehandlung

Jinku Hu 30 Januar 2023
  1. try...except
  2. raise Exception
  3. try...finally
  4. Python eingebaute Ausnahmen
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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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