Fehler lesen
Fehler gehören beim Programmieren dazu. Auch erfahrene Programmierer machen sie jeden Tag. Wichtig ist, sie schnell zu finden und zu beheben, und dabei helfen dir Fehlermeldungen. Lua hat zwei Arten von Fehlern, und ihre Meldungen sehen etwas unterschiedlich aus.
Syntaxfehler. Bevor Lua ein Programm ausführt, liest es es ganz durch und prüft, ob es nach den Regeln der Sprache geschrieben ist, also nach ihrer Syntax. Findet es einen Fehler, zum Beispiel ein fehlendes Anführungszeichen, führt es das Programm gar nicht aus, nicht einmal die Zeilen vor dem Fehler. In diesem Programm fehlt in Zeile 2 ein Anführungszeichen:
print("Guten Morgen, Emma!")
print("Hühner füttern)
print("Bella melken")Die Ausgabe bleibt leer, und darunter zeigt Lua diese Fehlermeldung in Rot:
main.lua:2: unfinished string near '"Hühner füttern)'Lies sie von links:
main.luaist der Name der Datei mit dem Programm. Auf dieser Seite heißt das Programm im Editor immermain.lua.2ist die Nummer der Zeile mit dem Fehler. Die Zeilennummern siehst du links im Editor.- Nach dem zweiten Doppelpunkt kommt eine Beschreibung des Fehlers, auf Englisch.
unfinished stringbedeutet einen Text (eine Zeichenkette), der nicht endet.nearsagt, wo Lua das Problem bemerkt hat: bei dem Text, der mit"Hühner füttern)beginnt. Sein schließendes Anführungszeichen fehlt, der Text geht also bis zum Zeilenende weiter, und die)ist Teil von ihm geworden.
Die Meldung sagt, wo Lua den Fehler bemerkt hat, und das ist nicht immer die Stelle, an der er steckt. Wenn eine Klammer nicht geschlossen wird, merkt Lua das erst in der nächsten Zeile:
print("Guten Morgen, Emma!"
print("Hühner füttern")Lua meldet:
main.lua:2: ')' expected (to close '(' at line 1) near 'print'')' expected bedeutet, dass Lua eine ) erwartet hat, und (to close '(' at line 1) sagt, welche Klammer sie schließen sollte: die aus Zeile 1. Wenn die Zeile aus der Meldung in Ordnung aussieht, prüfe also die Zeile darüber. Und wenn Lua am Ende des Programms ankommt, während es noch auf etwas wartet, endet die Meldung mit near <eof>: eof steht für „end of file“, Dateiende.
Fehler beim Ausführen. Ein Programm ohne Syntaxfehler startet, und Lua führt seine Zeilen eine nach der anderen aus. Wenn es an einen Befehl kommt, den es nicht ausführen kann, hört es auf. Was das Programm bis dahin ausgegeben hat, bleibt in der Ausgabe, und die Fehlermeldung steht darunter:
print("Guten Morgen, Emma!")
print("Hühner füttern")
prnt("Bella melken")
print("Karotten gießen")Das gibt die ersten beiden Zeilen aus, und dann kommt die rote Fehlermeldung:
Guten Morgen, Emma!
Hühner füttern
main.lua:3: attempt to call a nil value (global 'prnt')
stack traceback:
main.lua:3: in main chunkDie erste Zeile der Meldung hat dieselben Teile wie zuvor: die Datei, die Zeile (3) und die Beschreibung. attempt to call a nil value (global 'prnt') bedeutet, dass das Programm versucht hat, etwas namens prnt aufzurufen, aber es gibt nichts (nil) mit diesem Namen. Lua kennt print, aber nicht prnt. Wenn du attempt to call a nil value siehst, suche nach einem falsch geschriebenen Namen wie prnt oder Print.
Darunter listet stack traceback: auf, wo das Programm war, als der Fehler passierte, die jüngste Stelle zuerst. main.lua:3: in main chunk bedeutet Zeile 3 im Hauptteil deines Programms. Sobald deine Programme eigene Funktionen haben, wird diese Liste länger und zeigt, welche Funktion welche aufgerufen hat. Vorerst sagt dir die erste Zeile der Meldung alles, was du brauchst. Eine Zeile des Tracebacks, die mit [C]: beginnt, gehört zu Lua selbst (das in der Sprache C geschrieben ist), und du kannst sie überspringen.
Meldungen, die dir oft begegnen werden:
unfinished string: ein fehlendes Anführungszeichen am Ende eines Textes oder zwei verschiedene Anführungszeichen, wie in"Hallo'.')' expected: eine fehlende Klammer oder Wörter ohne Anführungszeichen:print(Guten Morgen)ergibt')' expected near 'Morgen'.attempt to call a nil value: ein falsch geschriebener Name einer Funktion.attempt to add a 'string' with a 'number':+statt.., wenn du einen Text und eine Zahl verbindest.
Behebe immer den ersten Fehler, den Lua meldet, und führe das Programm erneut aus. Ein Syntaxfehler kann andere Fehler verdecken, weil nichts läuft, bevor er behoben ist. Und ein Fehler beim Ausführen hält das Programm an, die Zeilen darunter wurden also noch nicht ausprobiert.
So schreibst du es:
Anweisungen
- 1
Emmas Abendbericht im Editor hat drei Fehler. Führe das Programm aus und lies die Fehlermeldung: In welcher Zeile steckt der Fehler, und was ist falsch? Behebe ihn und führe das Programm erneut aus. Wiederhole das, bis das Programm Folgendes ausgibt:
Abendbericht Eier heute: 12 Milch: 12 Liter Münzen: 60 Morgen: Regen Gute Nacht, Rex!