Zum Hauptinhalt springen
26P

4. 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. 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 oder for, 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

Häufigste Ursachen
  • 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)
Fehler finden

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)
Hinweis

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)
SSR

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.

Häufigste Ursachen

Die häufigste Ursachen von NameErrors 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)
Fehler finden

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.

SSR

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.

Häufigste Ursachen
  • 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

Nicht eingerückt
for i in range(5):
print('Hallo')
Korrektur
for i in range(5):
print('Hallo')
Falsch eingerückt
print('Hallo')
print('wie')
print('gehts?')
Korrektur
print('Hallo')
print('wie')
print('gehts?')
Fehler finden

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')
SSR

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.

Häufigste Ursachen

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.


Fehler finden

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


SSR