2.1 Erstellen von Ausnahmen
Wenn du nicht gewinnen kannst, führe. Wenn wir nicht vermeiden können, dass Fehler im Programm auftreten, müssen wir lernen, sie zu kontrollieren. Und dafür lass uns lernen, bewusst Ausnahmen zu erzeugen.
Das einfachste Beispiel für eine Ausnahme ist die Division durch Null. Und das Programm dazu ist ebenfalls simpel:
x = 100 / 0
Solcher Code wird mit einem Fehler ausgeführt:
Traceback (most recent call last):
File "", line 1, in
x = 100 / 0
~~~^~
ZeroDivisionError: division by zero
ZeroDivisionError ist der Name der Ausnahme, und division by zero ist deren kurze Beschreibung. Außerdem teilt Python die Zeilennummer mit, an der diese Ausnahme aufgetreten ist.
Ungültige Datentypen
Natürlich sind auch andere Ausnahmen möglich. Zum Beispiel beim Versuch, einen String und eine Zahl zu addieren:
s = "100" + 100
Eine TypeError Ausnahme tritt auf:
Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for +: 'str' and 'int'
Index außerhalb der Liste
Ein weiterer sehr verbreiteter Fehler, der eine Ausnahme erzeugt, ist der Versuch, auf ein Element zuzugreifen, das sich nicht in der Liste befindet:
my_list = [1, 2, 3]
print(my_list[10])
Eine IndexError Ausnahme tritt auf:
Traceback (most recent call last):
print(my_list[10])
~~~~~~~^^^^
IndexError: list index out of range
Wie viele gibt es? Es gibt Tausende von verschiedenen Arten von Ausnahmen. Zudem kannst du deine eigenen erstellen, wenn dir die bestehenden nicht ausreichen, um eine bestimmte Situation zu beschreiben. Aber die beliebtesten sind nicht so zahlreich.
2.2 Liste der beliebtesten Ausnahmen
Es gibt viele Ausnahmen, aber für dich als Anfänger ist es nützlich, über die beliebtesten zu wissen. Unten habe ich eine Tabelle mit ihnen zusammengestellt:
| Ausnahme | Beschreibung |
|---|---|
Exception |
Basis Klasse für alle Ausnahmen. |
IndexError |
Tritt auf, wenn auf einen nicht existierenden Index in einer Sequenz (zum Beispiel Liste oder Tupel) zugegriffen wird. |
KeyError |
Tritt auf, wenn auf einen nicht existierenden Schlüssel in einem Dictionary zugegriffen wird. |
NameError |
Tritt auf, wenn auf eine nicht existierende Variable zugegriffen wird. |
RuntimeError |
Tritt auf bei einem allgemeinen Laufzeitfehler, der nicht zu anderen Typen von Ausnahmen gehört. |
StopIteration |
Signalisierung des Endes einer Iteration tritt auf. |
SyntaxError |
Tritt auf bei einem Syntaxfehler im Code. |
IndentationError |
Tritt auf bei einem Einzugsfehler im Code (Untertyp von SyntaxError). |
TabError |
Tritt auf beim Mischen von Tabs und Leerzeichen für Einrückungen (Untertyp von IndentationError). |
TypeError |
Tritt auf bei dem Versuch, eine Operation mit inkompatiblen Datentypen durchzuführen. |
UnboundLocalError |
Tritt auf beim Zugriff auf eine lokale Variable vor deren Deklaration (Untertyp von NameError). |
ValueError |
Tritt auf bei der Übergabe eines Arguments mit falschem Wert an eine Funktion oder Operation. |
ZeroDivisionError |
Tritt auf bei der Division durch Null. |
Wahrscheinlich wirst du als Anfänger im ersten Monat deines Studiums auf all diese Fehler stoßen. Und das ist überhaupt nicht schlimm – man lernt nur aus Fehlern.
2.3 Fehler im Code
Lass uns noch ein paar Situationen durchgehen, in denen im Code Fehler auftreten, damit du sie leichter in deinem eigenen Code finden kannst:
IndentationError
Dieser Fehlertyp tritt auf, wenn die Einrückungen im Code falsch sind. Zum Beispiel das Mischen von Tabs und Leerzeichen oder falsche Anzahl von Einrückungen.
def example():
print("Hello")
print("World") # Falsche Einrückung löst IndentationError aus
example()
NameError
def example():
print(undeclared_variable) # Versuch eine nicht deklarierte Variable zu verwenden, löst NameError aus
example()
ValueError
Dieser Fehlertyp tritt auf, wenn eine Operation oder Funktion ein Argument des richtigen Typs, aber mit einem ungeeigneten Wert erhält.
def example():
int("abc") # Versuch, einen String, der keine Zahl ist, zu konvertieren, löst ValueError aus
example()
KeyError
Dieser Fehlertyp tritt auf, wenn das Programm versucht, auf einen nicht existierenden Schlüssel in einem Dictionary zuzugreifen.
def example():
my_dict = {"a": 1, "b": 2}
print(my_dict["c"]) # Versuch, auf einen nicht existierenden Schlüssel zuzugreifen, löst KeyError aus
example()
SyntaxError
Dieser Fehlertyp tritt auf, wenn es im Code einen Syntaxfehler gibt, also der Code nicht der Grammatik der Programmiersprache Python entspricht.
def example():
eval("if True print('Hello')") # Falsche Syntax löst SyntaxError aus
example()
Vorwarnung ist Vorsorge. Jetzt kannst du Situationen erkennen und erstellen, die Fehler auslösen. Es ist an der Zeit, zu lernen, wie man diese Fehler behandelt.
GO TO FULL VERSION