Python lernen · Schritt 10 von 14
Im MUD: jeder Traceback im Spiel liest sich genau so

Zum Spiel · 12.09.2026

Zum Spiel: Fehler lesen

Tracebacks lesen statt fürchten: Fehlertyp, Zeile, Ursache — und try/except genau so weit, dass dein Programm nicht stirbt.

Fehlermeldungen werden dich nie verlassen — erfahrene Programmierer lesen jeden Tag welche. Der Unterschied zu Anfängern: Sie lesen sie in Sekunden und wissen sofort, was zu tun ist. Genau diese Fertigkeit baust du hier auf. Sie ist der Grundstein für alles Weitere: Wer den Traceback lesen kann, kann jede Übung, jedes Programm und später den Falkencode reparieren.

Anatomie eines Tracebacks

Ein Traceback ist der Weg, den Python aufgezeichnet hat, bis etwas schiefging. Beispiel — bewusst einen Fehler gemacht:

print("Du betrittst die Katakomben.")
gold = int("Schwert")

Die Ausgabe sieht hart aus, ist aber eine Schatzkarte:

Traceback (most recent call last):
  File "spiel.py", line 2, in <module>
    gold = int("Schwert")
ValueError: invalid literal for int() with base 10: 'Schwert'
  • Ganz unten steht die Diagnose: Fehlertyp (ValueError) und Beschreibung („invalid literal“ — der Text kann nicht in eine Zahl verwandelt werden).
  • Darüber steht der Ort: Datei (spiel.py), Zeile (line 2) und die betroffene Zeile selbst.
  • Ganz oben steht „most recent call last“ — der letzte Aufruf. Bei langen Spuren liest man trotzdem unten an.

Das Vokabular der häufigsten Fehler

  • NameError — der Name ist unbekannt: Tippfehler oder du hast die Variable noch nicht angelegt.
  • TypeError — falsche Art von Wert: "3" + 4 (Text plus Zahl).
  • ValueError — richtiger Typ, unmöglicher Wert: int("Schwert").
  • SyntaxError — die Schreibweise ist kaputt (fehlender Doppelpunkt, Klammer). Kein Traceback: Das Programm startet gar nicht erst.
  • KeyError / IndexError — du greifst auf einen Schlüssel oder Platz zu, den es nicht gibt.
  • ZeroDivisionError — geteilt durch null.

Lerntrick: Notiere dir jeden neuen Fehlertyp auf einer Karteikarte — Typ, Bedeutung, wie er bei dir entstanden ist. Nach zwei Wochen erkennst du 95 % aller Probleme am ersten Wort.

try/except — das Sicherheitsnetz

Manchmal darf ein Fehler passieren: Der Spieler tippt „Viele!“ statt einer Zahl. Damit dann nicht das ganze Programm stirbt, fängst du den Fehler gezielt ein:

try:
    menge = int(input("Wie viele Tränke? "))
except ValueError:
    print("Das war keine Zahl — ich nehme 1.")
    menge = 1

print("Du bekommst", menge, "Tränke.")

Python versucht den try-Block. Passiert ein ValueError, springt es in den except-Zweig und läuft weiter. Zwei Regeln: Nenne den Fehlertyp — ein nacktes except: fängt auch deine Tippfehler ein und versteckt so echte Probleme. Und baue keine Ausnahme-Hierarchien — fängst du die drei üblichen Typen sauber ab, reicht das für Jahre.

Genau so arbeitet übrigens Falkenmoor: Tippt jemand Unsinn, antwortet die Engine höflich mit „Was meinst du mit …?“ statt abzustürzen. Hinter dem Stecken Prüfungen und abgefangene Fehler.

So übst du das

  • Fehler-Karteikarten: Jeden neuen Fehlertyp mit eigenem Beispiel notieren.
  • Archäologie: Nimm ein altes Programm, lösche wahllos Zeichen und übersetze die Meldungen.
  • Sicherheitsnetz üben: Jede int(input(...))-Stelle in ein try/except packen.
  • Alles läuft im Python Online-Interpreter — auch die Übungen unten.

Übungen

Übung 1 — Der Klassiker

Führe int("Schwert") aus. Welcher Fehlertyp liegt vor, und was sagt die Beschreibung? Erkläre es in einem Satz.

Musterlösung zeigen
int("Schwert")

ValueError: invalid literal for int() with base 10: 'Schwert' — der Text beschreibt keine Zahl, also kann int() ihn nicht umwandeln.

Übung 2 — NameError jagd

Provoziere einen NameError, indem du print(gold) aufrufst, ohne gold vorher anzulegen. Was steht ganz unten?

Musterlösung zeigen
print(gold)

# NameError: name 'gold' is not defined

Übung 3 — Das Sicherheitsnetz

Baue try/except um int(input("Alter: ")) — bei Unsinn soll „Das war keine Zahl.“ erscheinen und 0 genutzt werden.

Musterlösung zeigen
try:
    alter = int(input("Alter: "))
except ValueError:
    print("Das war keine Zahl.")
    alter = 0
print("Alter:", alter)

Übung 4 — Das falsche Netz

Was passiert hier — und wie reparierst du es?

Musterlösung zeigen
try:
    print(10 / 0)
except ValueError:
    print("Ups")

10 / 0 wirft einen ZeroDivisionError — das Netz fängt nur ValueError. Der Fehler fliegt durch. Richtig: except ZeroDivisionError: (oder einfach nicht durch null teilen).

Quiz — Teste dich

Erst überlegen, dann aufklappen — so trainiert es am meisten!

  1. Wo steht die eigentliche Ursache im Traceback?
  2. Was bedeutet NameError?
  3. Was wirft "3" + 4?
  4. Fängt except ValueError: auch einen ZeroDivisionError?
  5. Fehlt bei print("Hallo ein Anführungszeichen — bekommst du einen Traceback?
Quiz-Lösungen anzeigen
  1. Ganz unten: letzte Zeile = Fehlertyp + Beschreibung.
  2. Ein Name ist unbekannt — Tippfehler oder Variable wurde noch nicht angelegt.
  3. Einen TypeError — Text und Zahl lassen sich nicht addieren.
  4. Nein — except fängt nur den genannten (und Unter-)Typ.
  5. Nein — das ist ein SyntaxError: Python startet gar nicht erst, die Meldung kommt ohne Traceback.

Mehr aus der Kategorie „Zum Spiel“

← Zurück zum Lehrpfad