Aussehen
Fehler finden
Dein Programm tut nicht, was du wolltest. Das ist der Normalfall — wer beruflich programmiert, sucht Fehler länger, als er neue Zeilen schreibt.
Der Unterschied zwischen Anfänger:in und Profi ist nicht, dass die eine weniger Fehler macht. Er ist, dass die andere ein Verfahren hat, statt zu raten.

Debuggen
Debuggen heißt, einen Fehler im eigenen Programm zu finden und zu beheben. Bug — „Käfer" — war schon vor den Rechnern der Ausdruck für eine Störung in einer Maschine. 1947 klemmte in einem Rechner an der Harvard-Universität tatsächlich eine Motte; sie wurde ins Logbuch geklebt.
Drei Fragen, immer in dieser Reihenfolge
Ein Programm kann auf drei Arten scheitern, und sie sind gestaffelt: Was auf Stufe 2 schiefgeht, siehst du erst, wenn Stufe 1 sauber ist. Deshalb arbeitest du dich von oben nach unten durch — und nicht dort, wo dein Gefühl den Fehler vermutet.
Beachte den langen Pfeil: Nach jeder Änderung fängst du wieder oben an. Wer beim Reparieren einen Tippfehler einbaut, steht sonst auf Stufe 1 und sucht auf Stufe 3.
Stufe 1: Versteht Python dein Programm?
Python liest das ganze Programm, bevor es die erste Zeile ausführt. Stimmt die Grammatik nicht, passiert gar nichts — auch nicht der Teil, der in Ordnung wäre. Daran erkennst du diese Stufe: keine Ausgabe, nur eine Meldung.
python
alter = 15
if alter >= 18
print("Willkommen!")
else:
print("Noch nicht.") File "programm.py", line 3
if alter >= 18
^
SyntaxError: expected ':'Die Meldung nennt dir alles: line 3 die Zeile, ^ die Stelle, expected ':' das fehlende Zeichen. Auf dieser Stufe steht die Lösung meist schon da — deshalb ist sie die leichteste.
Die Zeilennummer ist ein Hinweis, keine Adresse
Python meldet, wo es den Fehler gemerkt hat, nicht immer, wo du ihn gemacht hast: Eine offene Klammer fällt erst am Zeilenende auf. Steht in der gemeldeten Zeile nichts Falsches, schau in der Zeile darüber.
Meldungen, die dir auf dieser Stufe begegnen
| Meldung | Was sie meint |
|---|---|
SyntaxError: expected ':' | Der Doppelpunkt hinter if, else, while, for oder def fehlt |
SyntaxError: '(' was never closed | Eine Klammer ist offen geblieben |
SyntaxError: invalid syntax | Irgendetwas passt hier grammatisch nicht — jetzt hilft nur genaues Hinsehen |
IndentationError: expected an indented block | Nach dem Doppelpunkt muss es eingerückt weitergehen |
IndentationError: unexpected indent | Hier ist etwas eingerückt, das nicht eingerückt gehört |
Aufgabe
Stufe 2: Läuft das Programm durch?
Python versteht dein Programm, es fängt an zu arbeiten — und bleibt mittendrin stehen. Zu erkennen daran, dass erst etwas ausgegeben wird und dann die Meldung kommt. Die Ausgabe davor sagt dir, wie weit es gekommen ist.
python
zaehler = 3
while zaehler > 0:
print("Noch", zaehler)
zaehler = zahler - 1
print("Start!")Noch 3
Traceback (most recent call last):
File "programm.py", line 5, in <module>
zaehler = zahler - 1
^^^^^^
NameError: name 'zahler' is not defined. Did you mean: 'zaehler'?So eine Meldung heißt Traceback und wird von unten nach oben gelesen: Die unterste Zeile sagt, was passiert ist, die Zeilen darüber, wo. Das Traceback (most recent call last): ganz oben sagt nichts, es steht immer da. Und Did you mean: 'zaehler'? ist genau das, was es zu sein scheint — Python hat den Tippfehler erraten.
Meldungen, die dir auf dieser Stufe begegnen
| Meldung | Was sie meint |
|---|---|
NameError: name '…' is not defined | Diesen Namen kennt Python nicht — Tippfehler, oder die Zeile mit = fehlt |
TypeError: can only concatenate str (not "int") to str | Text und Zahl sollen zusammen, das geht nicht ohne str() oder int() |
ValueError: invalid literal for int() | int() sollte aus etwas eine Zahl machen, das keine ist |
ZeroDivisionError: division by zero | Geteilt wird durch etwas, das gerade null ist |
IndexError: list index out of range | Das Element gibt es nicht — die Liste ist kürzer, als du denkst |
AttributeError: '…' object has no attribute '…' | Dieses Objekt kann das nicht, oder der Name ist falsch geschrieben |
Aufgabe
Stufe 3: Tut es, was es soll?
Das Programm läuft durch, ohne Meldung. Und ist trotzdem falsch.
Das ist die schwerste Stufe, weil dir niemand mehr etwas sagt: keine Zeilennummer, kein Pfeil, kein Text. Den Fehler bemerkt nur, wer weiß, was hätte herauskommen sollen.
python
summe = 0
for zahl in range(5):
summe = summe + zahl
print("Summe:", summe)Summe: 10Zusammengezählt werden sollen die Zahlen von 1 bis 5. Erwartet: 15. Tatsächlich: 10. Damit ist die Arbeit auf dieser Stufe beschrieben — du brauchst beide Angaben und suchst die Stelle, an der sie auseinandergehen.
Erwartet und tatsächlich
Ohne Erwartung gibt es keinen logischen Fehler, nur ein Ergebnis. Schreib deshalb vorher auf, was herauskommen soll — bei einer Rechnung die Zahl, bei Kara die Wiese. Im Kopf verschiebt sich die Erwartung zu leicht auf das, was gerade herauskommt.
Drei Werkzeuge helfen dir, die Stelle zu finden.
Hinsehen mit print(). Du siehst bisher nur das Ende. Setz eine Ausgabe mitten hinein, dann siehst du den Weg:
python
summe = 0
for zahl in range(5):
print("zahl ist", zahl, "— summe ist", summe)
summe = summe + zahl
print("Summe:", summe)zahl ist 0 — summe ist 0
zahl ist 1 — summe ist 0
zahl ist 2 — summe ist 1
zahl ist 3 — summe ist 3
zahl ist 4 — summe ist 6
Summe: 10Und da steht es: Gezählt werden 0, 1, 2, 3, 4 — die 5 fehlt, eine 0 ist zu viel. Das ist range(5), „fünf Stück ab null"; richtig wäre range(1, 6). Die Zählschleife hat dich davor gewarnt.
Der Einzelschritt. Auf python.jetzt liegt neben dem Startknopf der Einzelschritt: immer nur eine Zeile, daneben die Werte aller Variablen. Dasselbe wie das print() von eben, nur ohne Einbauen.
Halbieren. In einem langen Programm setzt du die Ausgabe in die Mitte: Stimmt der Wert dort noch, liegt der Fehler dahinter, sonst davor. Dann halbierst du wieder — bei hundert Zeilen bist du nach sieben Versuchen da.
Aufgabe
So gehst du auf jeder Stufe vor
Drei Angewohnheiten gelten auf allen drei Stufen gleichermaßen.
- Erst vermuten, dann ändern. Sag laut, warum das Programm das tut, und prüfe genau diese Vermutung. Ohne Vermutung änderst du nur Dinge.
- Eine Änderung auf einmal, danach ausführen. Wer drei Sachen gleichzeitig ändert, weiß hinterher nicht, welche geholfen hat.
- Was nicht geholfen hat, machst du rückgängig.
Aufgabe
Erklär es der Ente
Eine Sache hilft auf allen drei Stufen und hat mit Programmieren scheinbar nichts zu tun: Erklär den Fehler jemandem. Erstaunlich oft findest du ihn mitten im Erklären, bevor die andere Person ein Wort gesagt hat.
Das hat einen Namen — Rubberducking —, und es kommt aus einem Programmierbuch: eine Badeente auf den Schreibtisch stellen und ihr jede Zeile erklären, bevor man jemanden fragt.

Das klingt albern und funktioniert trotzdem. Beim Erklären musst du in Worte fassen, was jede Zeile tun soll — und dabei fällt auf, dass eine davon etwas anderes tut. Die Ente hat dabei einen Vorteil gegenüber deiner Sitznachbar:in: Sie hat immer Zeit und unterbricht nie.
Wenn du nicht weiterkommst: KI in drei Stufen
Eine KI hilft dir auf jeder der drei Stufen. Wie sehr sie nützt oder schadet, hängt an einer einzigen Sache: was du fragst. Denn sie antwortet immer — auch dann, wenn ein Hinweis gereicht hätte. Fang deshalb unten an und geh nur so weit hoch, wie du musst.
Stufe 1 — Erklär mir die Meldung
Du kopierst nur die Fehlermeldung hinein, keinen Code.
Ich lerne Python. Erklär mir diese Fehlermeldung in einfachen Worten:
Was bedeutet sie, und welche Art von Fehler steckt typischerweise dahinter?
Nenne keine Lösung für meinen Fall — ich habe dir meinen Code absichtlich
nicht gezeigt.
<hier die Fehlermeldung einfügen>Stufe 2 — Gib mir einen Tipp
Jetzt zeigst du deinen Code und verbietest die Lösung ausdrücklich. Diese Stufe bringt auf Stufe 3 am meisten, denn beim logischen Fehler fehlt dir ja gerade der Zeigefinger auf die richtige Zeile.
Ich lerne Python und suche einen Fehler in meinem Programm. Gib mir
einen Tipp, in welcher Zeile ich suchen soll und worauf ich achten muss.
Schreib mir NICHT den verbesserten Code und nenne den Fehler NICHT
direkt. Stell mir lieber eine Frage, die mich darauf bringt.
Das Programm soll: <was es tun soll>
Tatsächlich passiert: <was herauskommt>
<hier das Programm einfügen>Stufe 3 — Löse das Problem für mich
Hier ist mein Python-Programm. Es soll <was es tun soll>, tatsächlich
passiert aber <was herauskommt>. Korrigiere es und erkläre mir danach
Zeile für Zeile, was falsch war und warum deine Änderung es behebt.
<hier das Programm einfügen>Die Erklärung steht deshalb im Prompt mit drin. Lies sie — und wenn du sie nicht verstehst, ist das der eigentliche Fund: Dein Problem liegt dann nicht bei diesem Fehler, sondern eine Stufe tiefer.
Womit du das machst
Hast du kein eigenes KI-Konto, nimm duck.ai: ohne Anmeldung im Browser, mehrere Modelle zur Wahl, anonymisierte Eingaben. Oder lass dir von deiner Lehrer:in einen Zugang zu schulKI geben — das ist für die Schule gemacht.
Probier die drei Stufen aus
Nimm ein Programm, an dem du zuletzt hängengeblieben bist, oder eine der vier Aufgaben von dieser Seite.
- Frag mit dem Prompt von Stufe 1 und schreib auf, was du aus der Antwort gelernt hast.
- Frag mit dem Prompt von Stufe 2. Hat die KI sich an das Verbot gehalten, oder hat sie die Lösung doch verraten?
- Vergleicht in der Klasse: Bei wem hat Stufe 1 schon gereicht? Und wie oft hat die KI etwas behauptet, das nicht stimmte?