Sie haben bereits festgestellt, dass Python sehr pingelig ist was Tippfehler und die präzise Verwendung von Klammern, Anführungszeichen, Doppelpunkten und Leerzeichen angeht. Jede Sprache hat seine eigenen Regeln, wie Wörter und Sätze strukturiert sein müssen. Diese Regeln sind allgemein bekannt als die Syntax einer Sprache. Bei Programmiersprachen wird mit der Syntax festgelegt, welche Wörter, in welcher Reihenfolge und in welchem Kontext erlaubt sind.
Syntax Fehler (syntax errors)
Syntax Fehler sind kleine Fehler in einem Programm. Da das Programm nicht von einem Mensch, sondern von einem Computer "gelesen" und interpretiert wird, reicht ein Tippfehler, ein fehlendes Komma oder eine fehlende Klammer, dass das Programm nicht mehr verstanden werden kann.
Die Python Sprache setzt sich aus folgenden Elementen zusammen:
-
Schlüsselwörter (Statements): Wörter oder Zeichen, die ohne Anführungszeichen und ohne Klammern geschrieben werden. z.B.
import
,from
oderfor
, aber auch:
oder*
. Sie müssen in einer vordefinierten Reihenfolge vorliegen, damit diese von Python verstanden werden. (↩ alle Schlüsselwörter) -
Befehle (Unterprogramme, Funktionen): vordefinierte Befehle, die mit einer runden Klammer aufgerufen werden. z.B.
print('hello')
-
Variablen: Namen, die einen Wert enthalten
-
Fehler bei Schlüsselwörtern
-
vergessene oder falsch eingesetzte Feldtrenner (z.B.
:
) -
Falsche Anordnung von Schlüsselwörtern/Feldtrennern
Beispiele
frm turtle import *
forward(100)
from turtle import *
goto(100 50)
from turtle import *
for i in range(4)
forward(25)
right(90)
Untersuchen Sie obenstehende Programmschnipsel. Was sagen Ihnen die Fehlermeldungen?
-
Auf welcher Zeile steht die Art des Fehlers?
-
Wo finden Sie Hinweise auf den Fehler? Flicken Sie sie...
frm turtle import *
forward(100)
from turtle import *
goto(100 50)
Was macht der Befehl goto
? Schauen Sie die Funktionsweise unter Turtle Befehle#goto(x, y) nach
from turtle import *
for i in range(4)
forward(25)
right(90)
Namens Fehler (NameError
)
Liegt ein Fehler vor, der nicht bei Schlüsselwörtern (oder deren Anordnung) vorliegt, so handelt es sich oft um einen Namens-Fehler (NameError
). Es wird also versucht, ein Unterprogramm zu öffnen, das aber unter diesem Namen nicht gefunden werden kann.
Die häufigste Ursachen von NameError
s sind
-
Vertipper im Namen des Befehls
-
nicht
importierte
Befehle (z.B.from turtle import *
fehlt)
Beispiele
from turtle import *
forwrd(100)
Der angegebene Befehl forwrd
kann nicht gefunden werden, da er weder in einer importierten Bibliothek, noch im aktuellen Programm gefunden werden kann.
Der gleiche Fehler tritt auf, wenn der Befehl zwar richtig geschrieben wird, das Importieren aber vergessen geht:
forward(100)
Finden und lösen Sie die entstandenen Fehler
from math import ceil, floor
print('15.3 gerundet =', round(15.3))
print('15.8 gerundet =', round(15.8))
print('15.3 aufgerundet =', ceyl(15.3))
print('15.8 abgerundet =', flor(15.8))
Hinweis
Suchen Sie die fehlerhaften Befehle in Kombination mit Python
auf Google, bspw. python ceyl
.
Einrückungsfehler (IndentationError
)
Python erwartet nach jedem Doppelpunkt :
, dass ein eingerückter Codeblock kommt. Falls kein eingerückter Codeblock gefunden wird, entsteht ein IndentationError
. Wird jedoch fälschlicherweise eine Zeile eingerückt, so wird ebenfalls dieser Fehler angezeigt.
-
Die nächste Zeile nach einem Doppelunkt
:
ist nicht eingerückt -
Eine Zeile ist fälschlicherweise eingerückt
-
ein Leerschlag zu wenig eingerückt
Beispiel
for i in range(5):
print('Hallo')
for i in range(5):
print('Hallo')
print('Hallo')
print('wie')
print('gehts?')
print('Hallo')
print('wie')
print('gehts?')
Finden und lösen Sie die entstandenen Fehler, so dass die Ausgabe
Hallo zum 0
Hallo zum 1
Ende
lautet.
for i in range(2):
print('Hallo zum', i)
print('Ende')
Logikfehler
Aus der Sicht von Python funktioniert alles, top! 👍
Sobald aber das Programm ausgeführt wird, macht es nicht das, was Sie sich gewünscht haben - Logik-Fehler 💩...
Diese Fehler sind im allgemeinen am schwierigsten zu finden. Ein häufiger Fehler ist aber, dass man bei einem Befehl die runden Klammern am Ende vergisst - für Python kein Problem, da es den Befehl kennt, jedoch nicht dazu aufgefordert wird, diesen auszuführen.
Checkliste für Logikfehler
-
sind bei Befehlen die runden Klammern
()
am Ende angegeben?
Beispiel
from turtle import *
penup()
goto(-10, 10)
pendown
for i in range(4):
forward(20)
left(90)
Auf Zeile 4 fehlen die runden Klammern - pendown
wird nicht ausgeführt! Fehler beheben: Den Befehl mit pendown()
aufrufen.
Finden und beheben Sie alle Fehler, so dass folgende Ausgabe entsteht:
from turtle import *
fillcolor("Rot")
penup()
goto(-125 125)
begin_fill()
for i in range(4)
forward(250)
left(90)
end_fill()
forward(150)
links(90)
forward(50)
fillcolor("white")
begin_fill()
for i in range(4):
forward(50)
right(90)
forward(50)
left(90)
forward(50)
left(90)
end_fill
4. Fehler