Menu
Coddy logo textTech

Was ist ein Logikfehler?

Ein Logikfehler ist ein Denkfehler in einem Programm, durch den es ein falsches Ergebnis liefert, ohne abzustürzen oder eine Fehlermeldung zu zeigen. Der Code ist gültig und jede Zeile läuft, aber er tut nicht, was der Programmierer beabsichtigt hat.

Von Kevin Spektor, Mitgründer & CTO

Aktualisiert am 24. September 2026

Drei Testergebnisse, 80, 90 und 100, haben einen Durchschnitt von 90. Dieses Programm läuft ohne eine einzige Beschwerde und gibt etwas anderes aus:

Average: 203.33333333333334

Python hat genau das getan, was in der Zeile steht. Division kommt vor Addition, also wurde nur das letzte Ergebnis durch 3 geteilt, und das Ergebnis ist 80 + 90 + 33,33. Gemeint war (scores[0] + scores[1] + scores[2]) / 3. Setz die Klammern, und das Programm gibt Average: 90.0 aus.

Warum keine Fehlermeldung erscheint

Ein Computer prüft, ob Code gültig ist, nicht, ob er richtig ist. Der Parser prüft die Grammatik und fängt damit einen Syntaxfehler. Die Laufzeitumgebung prüft jede Operation und fängt damit einen Laufzeitfehler wie eine Division durch null. Drei Zahlen zu addieren und eine davon durch 3 zu teilen ist gültige Grammatik und eine erlaubte Operation, also bestehen beide Prüfungen.

Nur die Person, die das Programm geschrieben hat, weiß, dass es einen Durchschnitt berechnen sollte. Diese Absicht steht nirgends im Code, also kann kein Werkzeug das Ergebnis damit vergleichen. Ein Logikfehler ist die Lücke zwischen dem, was du dem Computer gesagt hast, und dem, was du wolltest.

Typische Ursachen für Logikfehler

Die meisten Logikfehler stammen aus einer kurzen Liste von Mustern.

  • Off-by-one-Fehler. Eine Schleife läuft einmal zu oft oder zu selten. range(1, 5) liefert 1, 2, 3 und 4, weil das Ende ausgeschlossen ist. Siehe Iteration.
  • Operatorrangfolge. a + b / 2 teilt nur b, wie beim Durchschnitt oben.
  • Der falsche Vergleich. <, wo <= nötig war, oder and, wo or nötig war. Bedingungen sind boolesche Ausdrücke, und ein falscher Operator kehrt das Ergebnis für manche Eingaben um.
  • Bedingungen in der falschen Reihenfolge. In einer Kette aus if und elif gewinnt die erste wahre Bedingung, also verdeckt ein breiter Test am Anfang die engeren darunter.
  • Die falsche Variable. In einer Schleife total aktualisieren, aber subtotal ausgeben.
  • Annahmen über Zahlen. 0.1 + 0.2 == 0.3 ist in Python, Java und JavaScript False, weil Gleitkommazahlen Näherungen sind. 7 // 2 ist 3, nicht 3,5.

Hier ist der Fehler mit der Reihenfolge der Bedingungen. Eine Punktzahl von 95 sollte ein A sein:

D
D
F

95 ist größer oder gleich 60, also gewinnt der erste Zweig, und das elif wird nie erreicht. Setz die höchste Schwelle an den Anfang, und jedes Ergebnis stimmt.

Fehlerarten beim Programmieren

Programmierfehler werden meist in drei Arten eingeteilt, je nachdem, wann sie auftreten und was sie meldet.

SyntaxfehlerLaufzeitfehlerLogikfehler
Wann er auftrittBevor das Programm läuftWährend es läuftWährend es läuft, oder er fällt nie auf
Was ihn erkenntDer Parser oder der CompilerDie Laufzeitumgebung oder das BetriebssystemEine Person oder ein Test
Läuft das Programm?NeinBis zur fehlschlagenden ZeileJa, bis zum Ende
FehlermeldungJa, mit ZeilennummerJa, mit TracebackKeine
Beispiel in Pythonif x > 3 ohne Doppelpunkt10 / 0a + b / 2 für einen Durchschnitt
Wie du ihn findestDie Meldung lesenDen Traceback lesenDie Ausgabe mit einer bekannten Antwort vergleichen

Manche Lehrbücher nennen mehr Arten, und die meisten davon passen in diese drei. Ein Typfehler, den der Java-Compiler ablehnt, etwa incompatible types: String cannot be converted to int, wird wie ein Syntaxfehler beim Kompilieren gefunden, und manche Bücher nennen ihn einen semantischen Fehler. Ein Linkerfehler passiert im letzten Schritt beim Bauen eines C- oder C++-Programms, wenn eine Funktion deklariert wurde, ihr Code aber nirgends zu finden ist. Arithmetik-, Ressourcen- und Dateifehler, etwa eine Division durch null, zu wenig Speicher oder das Öffnen einer fehlenden Datei, sind alles Laufzeitfehler. Den Begriff "semantischer Fehler" verwenden manche Kurse auch als anderen Namen für einen Logikfehler, prüf also, welche Bedeutung ein Lehrbuch meint.

Wie du einen Logikfehler findest

  1. Teste mit einer Antwort, die du schon kennst. Rechne das richtige Ergebnis für eine kleine Eingabe von Hand aus und vergleiche dann. Drei Ergebnisse lassen sich leichter prüfen als dreitausend.
  2. Gib die Zwischenwerte aus. Wenn du score und den gewählten Zweig oder den Schleifenzähler bei jedem Durchlauf ausgibst, siehst du den genauen Schritt, an dem die Wirklichkeit von deinem Plan abweicht.
  3. Geh mit einem Debugger Schritt für Schritt durch. Einen Breakpoint setzen und Zeile für Zeile ausführen erreicht dasselbe, ohne den Code zu ändern.
  4. Teste die Ränder. Probier 0, 1, den größten Wert, eine leere Liste und genau die Schwelle (60 und 90 im Notenbeispiel).
  5. Erklär den Code laut. Wenn du jede Zeile jemand anderem oder einer Quietscheente beschreibst, musst du sagen, was die Zeile tut, statt was du annimmst, dass sie tut.

Ein assert macht aus einer bekannten Antwort eine automatische Prüfung. Es tut nichts, wenn die Bedingung wahr ist, und hält das Programm an, wenn sie falsch ist:

Traceback (most recent call last):
  File "main.py", line 10, in <module>
    assert grade(95) == "A", "95 should be an A"
           ^^^^^^^^^^^^^^^^
AssertionError: 95 should be an A

Ein fehlschlagender Test macht aus einem stillen Logikfehler einen lauten mit Zeilennummer. Genau das ist die Idee hinter Unit-Tests.

Logikfehler in anderen Sprachen

Die Muster sind überall gleich, aber jede Sprache hat ihre eigenen Fallen. In JavaScript ist "5" + 3 der String "53", während "5" - 3 die Zahl 2 ist, also kann ein Wert, der als Text aus einem Formular gelesen wird, ohne jeden Fehler falsch aufsummiert werden. In C weist if (x = 5) der Variablen x den Wert 5 zu und ist immer wahr. Clang warnt standardmäßig davor (using the result of an assignment as a condition without parentheses), aber der Code wird trotzdem kompiliert und ausgeführt, also nimm Compiler-Warnungen so ernst wie Fehler.

Wie es weitergeht

Vergleiche diese Seite mit den Seiten zu Syntaxfehler und Laufzeitfehler, um zu sehen, wie jede Art gemeldet wird. Off-by-one-Fehler leben in Schleifen, also sind die Seite zu Iteration und die Python-Anleitung zu for-Schleifen gute nächste Schritte. Um falsche Ergebnisse in echten Übungen zu finden, probier den Python-Kurs.

Häufig gestellte Fragen

Was ist der Unterschied zwischen einem Syntaxfehler und einem Logikfehler?
Ein Syntaxfehler verletzt die Grammatik der Sprache, also wird das Programm vor dem Start abgelehnt, und du bekommst eine Meldung mit Zeilennummer. Ein Logikfehler folgt der Grammatik vollkommen und läuft bis zum Ende, aber das Ergebnis ist falsch, und es gibt überhaupt keine Meldung. Einen Syntaxfehler findest du, indem du die Meldung liest; einen Logikfehler, indem du die Ausgabe testest.
Was ist ein Logikfehler in Python?
Python-Code, der ohne Traceback läuft, aber die falsche Antwort liefert. Typische Beispiele sind range(1, 5), wenn du 1 bis einschließlich 5 wolltest, a + b / 2, wenn du (a + b) / 2 wolltest, und if-Zweige, die in der falschen Reihenfolge geprüft werden. Python kann sie nicht erkennen, weil es nicht wissen kann, was du gemeint hast.
Welche 5 Fehlerarten gibt es beim Programmieren?
Eine verbreitete Liste mit fünf Arten sind Syntaxfehler, semantische Fehler (Typfehler), Linkerfehler, Laufzeitfehler und Logikfehler. Die ersten drei werden beim Bauen des Programms gefunden, Laufzeitfehler treten während der Ausführung auf, und Logikfehler zeigen sich nur als falsche Ergebnisse. Viele Kurse lehren nur drei: Syntax-, Laufzeit- und Logikfehler.
Ist ein Logikfehler ein Bug?
Ja. Ein Bug ist jeder Mangel, durch den sich ein Programm anders verhält als beabsichtigt, und Logikfehler sind die häufigste Art. Abstürze und Fehlermeldungen sind auch Bugs, aber sie machen sich selbst bemerkbar, während ein Logikfehler einer Person oder einem Test auffallen muss.
Warum sind Logikfehler schwer zu finden?
Weil nichts auf sie zeigt. Es gibt keine Zeilennummer und keine Meldung, und das falsche Ergebnis kann plausibel aussehen, etwa ein Durchschnitt von 203 für drei Testergebnisse, den niemand nachprüft. Man findet sie, indem man die Ausgabe mit einer bereits bekannten Antwort vergleicht, und deshalb sind Tests mit bekannten Ergebnissen wichtig.
Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S