Springe zum Inhalt oder Footer
SerloDie freie Lernplattform

Kurse

Grundlagen 2

2Fehler verstehen

Behandle jeden Fehler als eine Gelegenheit, etwas zu lernen.

Wenn du verstehst, wodurch ein Fehler ausgelöst wurde, hast du wieder etwas Neues über die Programmiersprache gelernt. Ließ dir darum unbedingt immer die Fehlermeldungen genau durch und versuche zu verstehen, was sie bedeuten.

Du wirst mit der Zeit merken, ob dir ein ähnlicher Fehler schon einmal passiert ist und immer schneller die Ursache des Fehlers ausfindig machen können.

Computer verzeihen nicht

Eigentlich müsste es heißen: Programmiersprachen sind extrem penibel und verzeihen keinen Tippfehler. Aber wenn sie das nicht wären, könnte es Missverständnisse geben und das wäre noch schlimmer als einfach nichts zu tun.

Indentation Error

Wenn du auf Fehler stößt, liegt es normalerweise nicht daran, dass du sie absichtlich herbeigeführt hast. In der Regel sind es total banale Kleinigkeiten (Syntaxfehler), die einen Error auslösen und dein Programm sicherheitshalber abstürzen lassen. Aber ob du es glaubst oder nicht: Es ist gut, dass es Fehler gibt! Python zeigt dir durch Fehler, dass er nicht versteht, was du verlangst.

Fehlermeldungen verstehen

Über die serielle Konsole bekommst du die Fehlermeldungen mitgeteilt. Das ist ein großer Vorteil gegenüber Arduino. Wenn du dir die Meldung genau durchliest, erhältst du genug Informationen, um den Fehler zu finden und zu beheben. Die Zeile, die einen Fehler ankündigt, lautet immer:

Zurückverfolgung (jüngste Aufforderung zusetzt)

Die darauf folgenden Zeilen geben Auskunft darüber, wo Python den Fehler vermutet.

  Datei "code.py", Zeile 5

In der Zeile steht der Dateiname und die Zeile, in der Python nicht mehr weiter wusste. Die darauf folgende Zeile zeigt die Art des Fehlers an.

Vorsicht

Manchmal sitzt der Fehler aber auch an einer anderen Stelle. Es lohnt sich also auch die Zeilen davor anzusehen.

IndentationError

IndentationError: unerwarteter Einzug (Einrückung) Bitte Leerzeichen am Zeilenanfang kontrollieren!

Betrachte den Code und wirf einen Blick auf Zeile 5. Die Zeile beginnt mit einem Leerzeichen. Leerzeichen haben in der Programmiersprache Python eine Bedeutung und dürfen nur verwendet werden, wenn ein neuer Block nach einem while oder nach einem if bzw. else beginnt. In den Zeilen 5 bis 10 muss das Leerzeichen also weg.

Einen IndentationError erhältst du also, wenn du an einem Zeilenanfang unerwartet viele Leerzeichen schreibst. Du darfst aber gerne vor das Gleichheitszeichen Leerzeichen einfügen.

led_red   = digitalio.DigitalInOut(board.D10)
led_green = digitalio.DigitalInOut(board.D11)
led_blue  = digitalio.DigitalInOut(board.D12)
led_red.direction   = digitalio.Direction.OUTPUT
led_green.direction = digitalio.Direction.OUTPUT
led_blue.direction  = digitalio.Direction.OUTPUT

Verbessere den Fehler und speichere ab!

NameError

Der nächste Fehler lässt nicht lange auf sich warten:

  Datei "code.py", Zeile 14, in <module>
NameError: Name 'true' ist nirgends definiert worden. (Schreibweise kontrollieren)

Die nächste Zeile zeigt wieder die Art des Fehlers an. Wirf einen Blick auf Zeile 14 und versuche selbst herauszufinden, was hier falsch ist.

Verbessere den Fehler und speichere ab!

TypeError

Weiter gehts mit dem nächsten Fehler in Zeile 15

  Datei "code.py", Zeile 15, in <module>
TypeError: Funktion nimmt 1 Argumente ohne Keyword an, aber es wurden 2 angegeben

Wenn man in Deutschland zur Schule geht, lernt man das Komma als Dezimaltrennzeichen kennen. In einigen Ländern - unter anderem in Großbritannien und den Vereinigten Staaten - benutzt man allerdings den Punkt an Stelle des Kommas. Der Punkt hat sich deshalb in fast allen Programmiersprachen als Dezimaltrennzeichen durchgesetzt.

Das Komma hat in den meisten Programmiersprachen eine andere Bedeutung. Mit einem Komma trennt man die Argumente, die man an eine Methode übergeben möchte, voneinander. Die Zeile time.sleep(0,5) liest sich also:

Rufe die Methode sleep mit den beiden Attributen 0 und 5 auf.

Es sollte aber heißen:

Rufe die Methode sleep mit dem Attribute 0.5 (Null-komma-fünf) auf.

Verbessere den Fehler und speichere!

AttributeError

Und schon wieder ein neuer Fehler:

  Datei "code.py", Zeile 17, in <module>
AttributeError: 'module' Objekt hat kein Attribut 'Sleep'

Wirf einen Blick auf Zeile 17 und versuche wieder selbst den Fehler zu finden.

time.Sleep(0.5)

Fazit

Du hast nun hoffentlich verstanden, dass es etwas ganz Normales ist, beim Programmieren Fehler zu machen. Mache dich bereit, dass du in Zukunft viel Zeit damit zubringen wirst, Fehler aufzuspüren. Du kennst jetzt vier wichtige Error-Typen. Es gibt aber noch eine ganze Menge weiterer. Manchmal ist es hilfreich im Internet recherchieren, um herauszufinden was sie bedeuten. Profis schreiben sogar ihre eigenen Fehlertypen für ihre Module.

Aufgaben


Dieses Werk steht unter der freien Lizenz
CC BY-SA 4.0Was bedeutet das?