Fehler und Ausnahmen in Python

PythonBeginner
Jetzt üben

Einführung

In diesem Labor erhalten Sie ein praktisches Verständnis von Fehlern (Errors) und Ausnahmen (Exceptions) in Python. Wir werden untersuchen, wie man gängige Syntaxfehler identifiziert, die die Codeausführung verhindern, verschiedene Arten von Ausnahmen erkennt, die während der Laufzeit auftreten, und diese beiden fundamentalen Konzepte in der Python-Programmierung klar voneinander abgrenzt.

Durch praktische Übungen lernen Sie, Probleme wie falsche Einrückung (Indentation), fehlende Syntaxelemente und andere häufige Fallstricke zu erkennen und zu beheben, wodurch Sie eine solide Grundlage für das Schreiben von robustem und fehlerfreiem Python-Code aufbauen.

Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Anfänger mit einer Abschlussquote von 100% ist. Es hat eine positive Bewertungsrate von 100% von den Lernenden erhalten.

Syntaxfehler identifizieren

In diesem Schritt untersuchen wir gängige Syntaxfehler in Python. Syntaxfehler treten auf, wenn der Code gegen die grammatikalischen Regeln der Sprache verstößt, was den Interpreter daran hindert, den Code zu verstehen und auszuführen. Diese Fehler werden erkannt, bevor das Programm überhaupt gestartet wird.

Die notwendige Datei syntax_errors.py wurde für Sie im Verzeichnis ~/project erstellt.

Zuerst führen wir einen IndentationError ein. Öffnen Sie syntax_errors.py über den Dateiexplorer auf der linken Seite der WebIDE. Fügen Sie den folgenden Code hinzu, der eine falsche Einrückung enthält:

for i in range(5):
    print(i)
  print("This line has incorrect indentation")

Speichern Sie die Datei. Öffnen Sie nun das integrierte Terminal und führen Sie das Skript aus:

python syntax_errors.py

Sie werden einen IndentationError sehen. Der Python-Interpreter erwartet, dass Codeblöcke (wie der innerhalb einer for-Schleife) ein konsistentes Einrückungsniveau aufweisen.

  File "/home/labex/project/syntax_errors.py", line 3
    print("This line has incorrect indentation")
                                                ^
IndentationError: unindent does not match any outer indentation level

Korrigieren wir nun die Einrückung, führen aber einen anderen SyntaxError ein. Ändern Sie den Code in syntax_errors.py wie folgt. Beachten Sie den fehlenden Doppelpunkt (:) am Ende der ersten Zeile.

for i in range(5)
    print(i)
    print("This line has correct indentation")

Speichern Sie die Datei und führen Sie sie erneut im Terminal aus:

python syntax_errors.py

Dieses Mal erhalten Sie einen SyntaxError. Die for-Schleifenanweisung in Python erfordert einen Doppelpunkt am Ende, um den Beginn eines Codeblocks zu kennzeichnen.

  File "/home/labex/project/syntax_errors.py", line 1
    for i in range(5)
                     ^
SyntaxError: expected ':'

Schließlich korrigieren wir den Doppelpunkt, führen aber einen weiteren häufigen SyntaxError ein: einen nicht abgeschlossenen String (unterminated string). Ändern Sie die Datei syntax_errors.py wie folgt. Der String "hello' beginnt mit einem doppelten Anführungszeichen, endet aber mit einem einfachen Anführungszeichen.

for i in range(5):
    print("hello')

Speichern Sie die Datei und führen Sie sie aus:

python syntax_errors.py

Sie werden auf einen SyntaxError stoßen, da der String nicht ordnungsgemäß mit einem passenden Anführungszeichen geschlossen wurde.

  File "/home/labex/project/syntax_errors.py", line 2
    print("hello')
          ^
SyntaxError: unterminated string literal (detected at line 2)

Diese Beispiele verdeutlichen, dass Syntaxfehler behoben werden müssen, bevor Ihr Programm ausgeführt werden kann. Achten Sie stets genau auf die Einrückung, erforderliche Symbole wie Doppelpunkte und übereinstimmende Anführungszeichen.

Häufige Ausnahmen erkennen

In diesem Schritt untersuchen wir gängige Ausnahmen (Exceptions). Im Gegensatz zu Syntaxfehlern treten Ausnahmen während der Programmausführung auf. Der Code ist syntaktisch korrekt, aber es tritt ein Fehler auf, während er läuft.

Die Datei common_exceptions.py ist für Sie im Verzeichnis ~/project vorbereitet.

Zuerst provozieren wir einen ZeroDivisionError. Öffnen Sie common_exceptions.py im Editor und fügen Sie den folgenden Code hinzu:

numerator = 10
denominator = 0
result = numerator / denominator
print(result)

Speichern Sie die Datei und führen Sie sie im Terminal aus:

python common_exceptions.py

Das Programm beginnt mit der Ausführung, stoppt jedoch und zeigt einen ZeroDivisionError. Mathematisch ist die Division durch Null undefiniert, und Python löst diese Ausnahme aus, um das Problem anzuzeigen.

Traceback (most recent call last):
  File "/home/labex/project/common_exceptions.py", line 3, in <module>
    result = numerator / denominator
ZeroDivisionError: division by zero

Als Nächstes lösen wir einen NameError aus. Dies geschieht, wenn Sie versuchen, eine Variable zu verwenden, die noch nicht definiert wurde. Ersetzen Sie den Inhalt von common_exceptions.py durch Folgendes:

print(undefined_variable)

Speichern Sie die Datei und führen Sie sie aus:

python common_exceptions.py

Sie erhalten einen NameError, da der Interpreter nicht weiß, worauf sich undefined_variable bezieht.

Traceback (most recent call last):
  File "/home/labex/project/common_exceptions.py", line 1, in <module>
    print(undefined_variable)
NameError: name 'undefined_variable' is not defined

Nun sehen wir uns einen TypeError an. Dieser tritt auf, wenn Sie versuchen, eine Operation an einem Objekt eines ungeeigneten Typs durchzuführen. Ersetzen Sie den Inhalt von common_exceptions.py durch diesen Code:

print("Hello" + 5)

Speichern und führen Sie das Skript aus:

python common_exceptions.py

Sie sehen einen TypeError. Python erlaubt es nicht, einen String und eine Ganzzahl (integer) direkt mit + zu addieren.

Traceback (most recent call last):
  File "/home/labex/project/common_exceptions.py", line 1, in <module>
    print("Hello" + 5)
TypeError: can only concatenate str (not "int") to str

Schließlich demonstrieren wir einen IndexError. Dieser tritt auf, wenn Sie versuchen, auf ein Element einer Sequenz (wie einer Liste) mit einem Index zuzugreifen, der außerhalb des gültigen Bereichs liegt. Ersetzen Sie den Inhalt von common_exceptions.py durch Folgendes:

my_list = [1, 2, 3]
print(my_list[5])

Speichern und führen Sie das Skript aus:

python common_exceptions.py

Sie erhalten einen IndexError. Die Liste my_list enthält drei Elemente, daher sind ihre gültigen Indizes 0, 1 und 2. Der Zugriff auf Index 5 ist nicht möglich.

Traceback (most recent call last):
  File "/home/labex/project/common_exceptions.py", line 2, in <module>
    print(my_list[5])
IndexError: list index out of range

Das Verständnis dieser gängigen Ausnahmen ist ein wesentlicher Bestandteil beim Erlernen des Debuggens von Python-Code.

Unterscheidung zwischen Fehlern (Errors) und Ausnahmen (Exceptions)

In diesem letzten Schritt werden wir klar zwischen Syntaxfehlern (Syntax Errors) und Ausnahmen (Exceptions) unterscheiden. Diese Unterscheidung ist grundlegend für die Python-Programmierung und das Debugging.

Syntaxfehler (oder Parsing Errors):

  • Dies sind Fehler in der Struktur Ihres Codes, die gegen die Regeln von Python verstoßen.
  • Der Python-Interpreter findet diese Fehler, bevor Ihr Programm mit der Ausführung beginnt.
  • Ein Programm mit einem Syntaxfehler kann überhaupt nicht ausgeführt werden.
  • Beispiele: IndentationError, fehlende Doppelpunkte, nicht übereinstimmende Klammern oder Anführungszeichen.

Ausnahmen (oder Laufzeitfehler/Runtime Errors):

  • Diese Fehler treten während der Ausführung eines syntaktisch korrekten Programms auf.
  • Sie treten auf, wenn das Programm auf eine unerwartete Situation stößt, wie z. B. die Division durch Null oder den Zugriff auf eine nicht existierende Datei.
  • Wenn sie nicht behandelt werden, führen Ausnahmen dazu, dass Ihr Programm abstürzt und einen Traceback ausgibt.
  • Beispiele: ZeroDivisionError, NameError, TypeError, IndexError.

Sehen wir uns dies in der Praxis an. Öffnen Sie die Datei error_vs_exception.py im Dateiexplorer. Fügen Sie den folgenden Code hinzu, der sowohl einen Syntaxfehler (einen fehlenden Doppelpunkt) als auch eine Zeile enthält, die eine Laufzeitausnahme verursachen wird.

## This line has a syntax error (missing colon)
for i in range(5)
    print(i)

## This line will cause an exception (division by zero)
result = 10 / 0
print(result)

Speichern Sie die Datei und versuchen Sie, sie auszuführen:

python error_vs_exception.py

Beachten Sie, dass Sie sofort einen SyntaxError erhalten. Der Interpreter prüft die gesamte Datei auf korrekte Syntax, bevor er irgendetwas davon ausführt. Er findet den fehlenden Doppelpunkt und stoppt, ohne jemals die Zeile mit 10 / 0 zu erreichen.

  File "/home/labex/project/error_vs_exception.py", line 2
    for i in range(5)
                     ^
SyntaxError: expected ':'

Korrigieren wir nun den Syntaxfehler. Fügen Sie den fehlenden Doppelpunkt zur for-Schleifenzeile in error_vs_exception.py hinzu:

## The syntax error is now fixed
for i in range(5):
    print(i)

## This line will cause an exception (division by zero)
result = 10 / 0
print(result)

Speichern Sie die Datei und führen Sie sie erneut aus:

python error_vs_exception.py

Dieses Mal ist das Programm syntaktisch korrekt, sodass es mit der Ausführung beginnt. Die for-Schleife wird ausgeführt und druckt die Zahlen 0 bis 4. Dann, wenn das Programm versucht, result = 10 / 0 auszuführen, stößt es auf ein Laufzeitproblem und löst einen ZeroDivisionError aus, was zum Absturz des Programms führt.

0
1
2
3
4
Traceback (most recent call last):
  File "/home/labex/project/error_vs_exception.py", line 6, in <module>
    result = 10 / 0
ZeroDivisionError: division by zero

Dies demonstriert deutlich, dass Syntaxfehler die Ausführung verhindern, während Ausnahmen während der Ausführung auftreten. In zukünftigen Labs lernen Sie, wie Sie Ausnahmen elegant behandeln können, damit sie Ihr Programm nicht zum Absturz bringen.

Zusammenfassung

In diesem Lab haben Sie den grundlegenden Unterschied zwischen Fehlern (Errors) und Ausnahmen (Exceptions) in Python gelernt. Sie begannen damit, gängige Syntaxfehler wie IndentationError und SyntaxError aufgrund eines fehlenden Doppelpunkts zu identifizieren und zu beheben, wobei Sie verstanden haben, dass diese verhindern, dass ein Programm überhaupt ausgeführt wird.

Anschließend haben Sie mehrere gängige Laufzeitausnahmen untersucht, darunter ZeroDivisionError, NameError, TypeError und IndexError. Sie haben gesehen, wie diese Ausnahmen in syntaktisch korrektem Code auftreten, wenn eine Operation während der Ausführung fehlschlägt. Schließlich haben Sie Ihr Verständnis gefestigt, indem Sie beobachtet haben, wie der Python-Interpreter eine Datei behandelt, die sowohl einen Syntaxfehler als auch eine potenzielle Ausnahme enthält, was beweist, dass die Syntax überprüft wird, bevor die Ausführung beginnt. Dieses Wissen bildet eine entscheidende Grundlage für das Schreiben und Debuggen von Python-Anwendungen.