Fehler und Ausnahmen in Python verstehen

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

In diesem Labor erhalten Sie ein praktisches Verständnis von Fehlern und Ausnahmen (Exceptions) in Python. Wir werden untersuchen, wie häufige Syntaxfehler, die die Codeausführung verhindern, identifiziert werden, verschiedene Arten von Ausnahmen, die während der Laufzeit auftreten, erkannt werden und wie diese beiden grundlegenden Konzepte in der Python-Programmierung klar unterschieden werden.

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

Syntaxfehler identifizieren

In diesem Schritt werden wir gängige Syntaxfehler in Python untersuchen. 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 normalerweise erkannt, bevor das Programm ausgeführt wird.

Beginnen wir mit der Erstellung einer Python-Datei zur Demonstration einiger Syntaxfehler. Öffnen Sie das integrierte Terminal in der WebIDE und navigieren Sie zum Verzeichnis ~/project, falls Sie sich nicht bereits dort befinden.

Erstellen Sie eine neue Datei namens syntax_errors.py im Verzeichnis ~/project mit dem VS Code-Editor.

cd ~/project
touch syntax_errors.py

Öffnen Sie nun syntax_errors.py im VS Code-Editor und fügen Sie den folgenden Code hinzu, der aufgrund falscher Einrückung einen Syntaxfehler enthält:

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

Speichern Sie die Datei. Versuchen Sie nun, dieses Skript im Terminal auszuführen:

python syntax_errors.py

Sie sehen eine IndentationError, die darauf hinweist, dass die Einrückung nicht konsistent ist.

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

Lassen Sie uns nun den Einrückungsfehler beheben und einen weiteren gängigen Syntaxfehler einführen: einen fehlenden Doppelpunkt in einer Schleifenanweisung. Ändern Sie die Datei syntax_errors.py wie folgt:

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

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

python syntax_errors.py

Dieses Mal erhalten Sie einen SyntaxError aufgrund des fehlenden Doppelpunkts nach range(5).

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

Schließlich korrigieren wir den Syntaxfehler, indem wir den Doppelpunkt hinzufügen, und führen einen Syntaxfehler mit nicht übereinstimmenden Anführungszeichen ein. Ändern Sie die Datei syntax_errors.py wie folgt:

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, der auf eine nicht abgeschlossene Zeichenfolgen-Literal hinweist.

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

Diese Beispiele veranschaulichen einige gängige Syntaxfehler, auf die Sie stoßen könnten. Achten Sie beim Schreiben von Python-Code genau auf Einrückungen, Satzzeichen und übereinstimmende Anführungszeichen.

Gängige Ausnahmen erkennen

In diesem Schritt werden wir gängige Ausnahmen (Exceptions) in Python untersuchen. Im Gegensatz zu Syntaxfehlern treten Ausnahmen auf, wenn das Programm syntaktisch korrekt ist, aber während der Ausführung auf einen Fehler stößt. Diese Fehler können aus verschiedenen Gründen auftreten, z. B. durch ungültige Eingaben, nicht verfügbare Ressourcen oder logische Fehler.

Erstellen wir eine neue Python-Datei namens common_exceptions.py im Verzeichnis ~/project, um einige gängige Ausnahmen zu demonstrieren.

cd ~/project
touch common_exceptions.py

Öffnen Sie common_exceptions.py im VS Code-Editor und fügen Sie den folgenden Code hinzu, der einen ZeroDivisionError verursacht:

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

Sie sehen eine ZeroDivisionError, die darauf hinweist, dass Sie versucht haben, durch Null zu teilen.

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

Ändern wir nun die Datei common_exceptions.py, um einen NameError zu demonstrieren. Dieser Fehler tritt auf, wenn Sie versuchen, einen Variablen- oder Funktionsnamen zu verwenden, der nicht definiert wurde.

print(undefined_variable)

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

python common_exceptions.py

Sie erhalten einen NameError, da undefined_variable kein Wert zugewiesen wurde.

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

Als Nächstes demonstrieren wir einen TypeError. Diese Ausnahme tritt auf, wenn eine Operation auf ein Objekt eines ungeeigneten Typs angewendet wird. Ändern Sie common_exceptions.py wie folgt:

print("Hello" + 5)

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

python common_exceptions.py

Sie sehen einen TypeError, da Sie keine Zeichenfolge und eine Ganzzahl direkt verketten können.

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. Diese Ausnahme tritt auf, wenn Sie versuchen, auf einen Index zuzugreifen, der außerhalb der Grenzen einer Sequenz (wie einer Liste oder Zeichenfolge) liegt. Ändern Sie common_exceptions.py wie folgt:

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

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

python common_exceptions.py

Sie erhalten einen IndexError, da die Liste nur die Indizes 0, 1 und 2 hat.

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 hilft Ihnen, Ihren Python-Code effektiver zu debuggen.

Unterscheidung zwischen Fehlern und Ausnahmen

In diesem Schritt fassen wir die wichtigsten Unterschiede zwischen Syntaxfehlern und Ausnahmen in Python zusammen. Das Verständnis dieser Unterscheidung ist entscheidend für effektives Debugging und Fehlerbehandlung.

Syntaxfehler:

  • Treten auf, wenn der Code gegen die grammatikalischen Regeln von Python verstößt.
  • Werden vom Python-Interpreter bevor die Programmausführung beginnt, erkannt.
  • Verhindern, dass das Programm überhaupt ausgeführt wird.
  • Beispiele hierfür sind falsche Einrückung, fehlende Doppelpunkte, nicht übereinstimmende Anführungszeichen und falsch geschriebene Schlüsselwörter.
  • Der Interpreter zeigt auf die Stelle des Syntaxfehlers.

Ausnahmen (Exceptions):

  • Treten während der Ausführung eines syntaktisch korrekten Programms auf.
  • Zeigen an, dass während der Laufzeit etwas Unerwartetes passiert ist.
  • Können durch verschiedene Faktoren verursacht werden, darunter ungültige Eingaben, logische Fehler oder Probleme mit externen Ressourcen.
  • Beispiele hierfür sind ZeroDivisionError, NameError, TypeError, IndexError und ValueError.
  • Wenn sie nicht behandelt werden, führen Ausnahmen dazu, dass das Programm abrupt beendet wird und ein Traceback angezeigt wird.

Erstellen wir eine abschließende Python-Datei, um beide Arten von Problemen an einem Ort zu veranschaulichen. Erstellen Sie eine neue Datei namens error_vs_exception.py im Verzeichnis ~/project.

cd ~/project
touch error_vs_exception.py

Öffnen Sie error_vs_exception.py im VS Code-Editor und fügen Sie den folgenden Code hinzu:

## 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

Sie sehen sofort einen SyntaxError, da der Interpreter den fehlenden Doppelpunkt erkennt, bevor er irgendeinen Code ausführt.

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

Das Programm stoppt hier und versucht nicht einmal, die Division auszuführen, die den ZeroDivisionError verursachen würde.

Korrigieren Sie nun den Syntaxfehler, indem Sie den Doppelpunkt hinzufügen:

## 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 führen Sie sie erneut aus:

python error_vs_exception.py

Dieses Mal wird das Programm die Schleife erfolgreich ausführen, aber dann auf den ZeroDivisionError stoßen, wenn es versucht, die Division durchzuführen.

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 zeigt, dass Syntaxfehler die Ausführung verhindern, während Ausnahmen während der Ausführung auftreten. Im nächsten Labor lernen wir, wie man Ausnahmen ordnungsgemäß behandelt, um zu verhindern, dass unsere Programme abstürzen.

Zusammenfassung

In diesem Labor haben wir zunächst gängige Syntaxfehler in Python identifiziert. Wir haben gelernt, dass Syntaxfehler auftreten, wenn Code gegen die grammatikalischen Regeln der Sprache verstößt, was die Ausführung verhindert und typischerweise vor der Laufzeit erkannt wird. Anhand praktischer Beispiele sind wir auf IndentationError aufgrund inkonsistenter Einrückung und SyntaxError aufgrund eines fehlenden Doppelpunkts in einer Schleifenanweisung gestoßen und haben diese behoben.

Anschließend haben wir gängige Ausnahmen (Exceptions) erkannt, die während der Programmausführung auftreten, auch wenn die Syntax korrekt ist. Wir haben Beispiele für Ausnahmen wie NameError (wenn eine Variable nicht definiert ist) und TypeError (wenn eine Operation mit einem inkompatiblen Datentyp durchgeführt wird) untersucht. Abschließend haben wir zwischen Fehlern und Ausnahmen unterschieden und verstanden, dass Fehler Probleme sind, die die Programmausführung verhindern (wie Syntaxfehler), während Ausnahmen Laufzeitprobleme sind, die potenziell behandelt werden können.