Fehler

Es gibt (mindestens) zwei unterscheidbare Arten von Fehlern: Syntaxfehler und Ausnahmen.

Syntaxfehler

Syntaxfehler, auch bekannt als Parsing-Fehler, sind vielleicht die häufigste Art von Fehlern beim Lernen von Python:

In [2]:
while True print('Hello world')
  File "<ipython-input-2-2b688bc740d7>", line 1
    while True print('Hello world')
                   ^
SyntaxError: invalid syntax

Der Parser wiederholt die Zeile mit dem Fehler und zeigt mit einen kleinen Pfeil an, der auf den ersten Punkt in der Zeile zeigt, in der der Fehler erkannt wurde. Der Fehler wird durch den dem Pfeil vorangehenden Token verursacht (oder zumindest erkannt): In dem obigen Beispiel wird der Fehler bei der Funktion print() erkannt, da vor dieser Funktion ein Doppelpunkt (':') fehlt. Dateiname und Zeilennummer werden angegeben, so dass hieraus klar wird, wo gesucht werden kann, falls die Eingabe von einem Skript kam.

In [3]:
a = 1
b = 2
if a < b:
    c = b + a
else
    c = b * a
  File "<ipython-input-3-abeb565d81d6>", line 5
    else
        ^
SyntaxError: invalid syntax

Im Jupyter Notebook wird als File-Name immer ein zufällig konstruierter Dateiname, beginnend mit ipython-input verwendet, während bei physikalisch existierenden Dateien der entsprechende File-Name ausgegeben wird, wie im folgenden Beispiel mit dem Dateinamen fehlertest.py zu sehen ist:

In [4]:
%%writefile fehlertest.py
a = 1
b = 2
if a < b:
    c = b + a
else
    c = b * a
Writing fehlertest.py
In [5]:
!python fehlertest.py
  File "fehlertest.py", line 5
    else
       ^
SyntaxError: invalid syntax

Analog wird der Syntaxfehler auch ausgegeben, wenn die entsprechende Datei importiert wird, daher ist es immer sinnvoll jede Python-Modul-Datei alleine auf ihre Syntax und korrekte Durchführung zu testen, bevor sie in ein Paket übernommen wird:

In [6]:
import fehlertest
Traceback (most recent call last):

  File "/home/root/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2910, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)

  File "<ipython-input-6-5fc9d23264ac>", line 1, in <module>
    import fehlertest

  File "/home/nik/Public/SE2017FS02/Skript/pre_chapter/Fehler und Ausnahmen/fehlertest.py", line 5
    else
        ^
SyntaxError: invalid syntax

Einrückungsfehler (Indentation Error)

Ein weiterer Fehler, der ein spezieller Syntaxfehler ist und ebenfalls noch vor jeglicher Ausführung auftaucht, ist der Einrückungsfehler (Indentation Error):

In [7]:
if 1 < 2:
print("Stimmt")
  File "<ipython-input-7-f7cf265bb251>", line 2
    print("Stimmt")
        ^
IndentationError: expected an indented block

Ein spezieller Einrückungsfehler, ist der TabError, der eine inkonsistente Benutzung von Tabulatorzeichen und Leerzeichen anzeigt:

In [8]:
%%writefile indentationtest.py
def test():
        if 10 < 2:
            print("Stimmt")
	else:
   	    print("Stimmt nicht")
test()
Writing indentationtest.py
In [9]:
import indentationtest
Traceback (most recent call last):

  File "/home/root/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2910, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)

  File "<ipython-input-9-e1645c576bd8>", line 1, in <module>
    import indentationtest

  File "/home/nik/Public/SE2017FS02/Skript/pre_chapter/Fehler und Ausnahmen/indentationtest.py", line 4
    else:
         ^
TabError: inconsistent use of tabs and spaces in indentation
In [10]:
%%Mooc MoocCheckboxesAssessment
Out[10]:

Syntax Error

Worin erkennt man bei einem Syntaxfehler an welcher Stelle im Code der Fehler passiert ist ?

in der 1. Zeile der Fehlermeldung steht der Dateiname und die Zeilennummer in dem der Fehler aufgetaucht ist
der Code in dem der Fehler aufgetaucht ist wird in der 2. Zeile wiederholt
in der 3. Zeile wird mit einem Pfeil die Stelle in der 2. Zeile markiert, wo der Fehler genau aufgetreten ist
in der 4. Zeile steht dann die Ausnahme und Details zur Ausnahme
In [11]:
%%Mooc Video
Out[11]:

Weitere Literatur

In [12]:
%%Mooc WebReference

Errors and Exceptions

https://docs.python.org/3/tutorial/errors.html

Hinweis: Fehler und Ausnahmen