3. Fehler
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.
- Syntax
- Bei Programmiersprachen wird mit der Syntax festgelegt, welche Wörter, in welcher Reihenfolge und in welchem Kontext erlaubt sind.
Syntax Fehler SyntaxError
Syntax Fehler sind kleine Fehler in einem Programm. Da das Programm nicht von einem Menschen, sondern von einem Computer "gelesen" und interpretiert wird, reicht ein Tippfehler, ein fehlendes Komma oder eine fehlende Klammer, dass das Programm vom Computer nicht mehr verstanden werden kann.
Die Python Sprache setzt sich aus folgenden Elementen zusammen:
- Schlüsselwörter
- oder
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)
- Wörter oder Zeichen, die ohne Anführungszeichen und ohne Klammern geschrieben werden.
- Befehle
- oder
Unterprogramme
,Funktionen
- vordefinierte Befehle, die mit einer runden Klammer aufgerufen werden.
- z.B.
print('hello')
- vordefinierte Befehle, die mit einer runden Klammer aufgerufen werden.
- 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 (oder eine Variable abzufragen), 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. Flicken Sie alle Fehler, indem Sie die Fehlermeldungen analysieren.
Die verwendeten Befehle haben wir bisher nicht angeschaut. Dennoch können die Fehler durch die Fehlermeldungen gefunden und behoben werden.
from math import *
print('15.3 gerundet =', rond(15.3))
print('15.8 gerundet =', round(15.8))
print('15.3 aufgerundet =', ceyl(15.3))
print('15.8 abgerundet =', flor(15.8))
Nachdem das Programm nun geflickt ist... was machen die Befehle?
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
Am einfachsten kann Code mit der Tabulator-Taste eingerückt werden. Es kann auch ein Code-Block markiert und mit eingerückt werden.
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 und das Programm kann ausgeführt werden 👍🥳.
Sobald aber das Programm ausgeführt wird, macht es nicht das, was Sie sich gewünscht haben - dann spricht man von Logik-Fehlern 💩...
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? - bis zu welchem Punkt funktioniert das Programm? (Fehler eingrenzen)
- ...
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