Wer mehr und mehr programmiert, bei dem werden irgendwann Fehler (oder Bugs) auftreten. Das Auslösen, Verstehen und Korrigieren von Fehlern ist ein wichtiger Teil des Programmierens. Python wird - soweit möglich - alles ausführen, was gefragt ist, aber wenn es nicht möglich ist, wird es natürlich auch nicht gehen. Ist das der Fall, versucht Python zumindest noch ein paar Informationen über den Fehler zu nennen, damit du ihn korrigieren kannst.
Hier ist ein Python-Fehler:
In diesem ersten Beispiel haben wir die Klammern vergessen, die für print(...)
erforderlich sind. Python versteht nicht, was wir zu tun versuchen.
Hier eine andere Art von Fehler:
In diesem zweiten Beispiel haben wir die Variable test
nicht definiert, aber genutzt. Python weiß, was wir tun wollen, aber da test
nicht existiert, tritt ein Fehler auf.
Ein Syntax-Fehler tritt auf, wenn Python nicht versteht, was gemeint ist. Ein Laufzeitfehler tritt auf, wenn Python weiß, was es tun soll, aber den Befehl nicht ausführen kann.
Im Deutschen wäre ein Syntaxfehler ein Satz wie
Bitte Katze Hund Affe.
Die Grammatik in diesem Satz macht keinen Sinn. Aus der Sicht der deutschen Grammatik fehlt hier ein Verb (Aktion). Man kann nicht verstehen, was gefragt ist. Syntax bedeutet das Gleiche wie Grammatik.
Im Deutschen wäre ein Laufzeitfehler ein Satz wie
Bitte iss das Klavier.
Der Satz macht Sinn in grammatikalischer Sicht - es gibt ein Substantiv und ein Verb an der richtigen Stelle - also kann man verstehen, was gefragt ist. Allerdings wirst du Probleme haben, den Befehl auszuführen - es sei denn, du bist eine Termite. Man nennt dies einen Laufzeitfehler, da es erst auftritt, wenn das Programm gestartet ist - also während der Laufzeit.
Wir werden auch über logische Fehler reden. Das sind Fehler, die das Programm nicht zum Absturz bringen, aber das falsche Ergebnis liefern. Ein Beispiel wäre:
Bitte schließe die Hintertüre, damit keine Fliegen reinkommen.
Das wäre ein logischer Fehler, wenn die Vordertüre auch offen ist: auch wenn der Befehl Sinn macht und du die Hintertür schließen kannst, wird das Ziel - die Fliegen draußen zu lassen - nicht erreicht, wenn sie noch durch die Vordertür reinkommen.
Typische Syntaxfehler
Hier sind weitere Beispiele von Syntaxfehlern, die in Python auftreten können. Unter anderem können Syntaxfehler auftreten, wenn man vergisst, Strings in Anführungszeichen zu setzen:
Hier versucht Python, Hello
und World!
als Namen von Variablen zu verstehen. Aber das gelingt nicht. Stattdessen tritt der Fehler SyntaxError: invalid syntax
auf, wobei ^
auf das Ausrufezeichen zeigt. Das liegt daran, dass in Python Ausrufezeichen (!
) in Variablennamen nicht erlaubt sind. Die Syntax ist ungültig.
Der Syntaxfehler verschwindet, wenn man print("Hello, World!")
benutzt. Dann akzeptiert Python das !
als Teil des Textes "Hello, World!"
.
Ein anderer kleiner Fehler:
Das Problem hier ist, dass class
ein spezielles Wort in Python ist. Hätte man stattdessen course
geschrieben, würde alles wunderbar funktionieren. Klicke hier um eine Liste aller speziellen Wörter (auch "Reservierte Bezeichner") zu sehen.
Wenn du Anführungszeichen oder Klammern benutzt und das/die zweite vergessen hast, wird ein Syntaxfehler auftreten:
In dieser Fehlermeldung steht EOL als Abkürzung für "End Of Line" (Ende der Zeile): Python erwartet ein weiteres "
aber das Ende der Zeile wurde erreicht, bevor es gefunden werden konnte.
Genauso steht EOF für "End Of File" (Ende der Datei): Python suchte nach )
aber die Datei endet vorher.
Laufzeitfehler
Hier sind einige Laufzeitfehler. Python ist in der Lage zu verstehen, was das Programm sagt, aber gerät in Schwierigkeiten, wenn es tatsächlich die Anweisungen ausführt.
- Verwendung einer undefinierten Variable oder Funktion. Dies kann auch passieren, wenn du Großbuchstaben unregelmäßig im Namen einer Variablen verwendest.
- Durch null teilen, was in der Mathematik keinen Sinn macht. (Warum? Da 0 mal egal welche Zahl immer 0 ergibt, gibt es keine Lösung für 1 = X * 0, also ist 1/0 undefiniert.)
- Das Verwenden von Operatoren für die falsche Art von Daten
Du wirst noch mehr Wege entdecken, wie du Fehler produzieren kannst, wenn du mehr über Python lernst.
Was ist der technische Unterschied zwischen einem Syntaxfehler und einem Laufzeitfehler? Dieses Beispiel sollte es verdeutlichen. Schaue dir die Ausgabe beider Programme an.
Das Programm mit dem Laufzeitfehler erzeugt eine Ausgabe, das Programm mit dem Syntaxfehler nicht. Das liegt daran, dass Python in 2 Schritten arbeitet:
Das Programm mit dem Syntaxfehler wird also gar nicht erst ausgeführt, das Programm mit dem Laufzeitfehler hingegen schon. Es werden alle Befehle bis zum eigentlichen Fehler problemlos ausgeführt.
|
Logische Fehler
Dein Programm funktioniert eventuell ohne abzustürzen (kein Syntax- oder Laufzeitfehler), macht aber dennoch etwas falsch. Ein Beispiel: Du möchtest ein Programm schreiben, dass den Durchschnitt (arithmetisches Mittel) zweier Zahlen berechnet. Der Durchschnitt der Zahlen x und y ist definiert als
Warum funktioniert das folgende Programm nicht?
Der Durchschnitt sollte
sein, aber das Programm gibt 5.0
aus! Der Fehler folgt aus Reihenfolge, in der die Operatoren in der Arithmetik abgearbeitet werden. Wenn du x + y / 2
schreibst, bedeutet das dasselbe wie . Um das Problem zu beheben, sollte die dritte Zeile average = (x + y) / 2
lauten, um Python klar zu machen, dass wir berechnen wollen, wo erst addiert und danach dividiert wird.
Logische Fehler treten auf, wenn du das Programm falsch entworfen hast oder dein Code nicht deinem Entwurf entspricht (wie in dem Beispiel mit average
). Logische Fehler können schwierig zu finden sein - gerade bei längeren Programmen - aber mit der Zeit, wenn du besser programmieren kannst, werden auch logische Fehler seltener auftreten. Einige Tipps, wie man logische Fehler vermeidet, findest du in Lektion 6D.
Übungen
Am Ende dieser Lektion findest du drei Übungen zum debuggen (Fehlerbeseitigung). Du kannst versuchen, den Fehler vor der Ausführung zu beseitigen oder dir erst Pythons Fehlermeldung anschauen, um festzustellen, was fehlerhaft ist.
Jedes Programm enthält bereits Code. Du musst jeweils nur wenige Zeichen (Buchstaben/Symbole/Zahlen) ändern, um das Problem zu beheben. Lösungen, in denen zu viele Zeichen verändert wurden, werden verworfen! Klicke auf Code zurücksetzen, um die Ursprungsversion zurückzuerlangen. |
Wenn du alle Bugs zerquetscht hast, klicke unten den "Weiter mit" Button.