Was ist ein Laufzeitfehler?
Ein Laufzeitfehler ist ein Fehler, der auftritt, während ein Programm läuft, weil eine Operation mit den vorhandenen Werten nicht ausgeführt werden kann, etwa eine Division durch null oder ein Zugriff hinter das Ende einer Liste. Das Programm hält an dieser Zeile an, sofern der Fehler nicht behandelt wird.
Aktualisiert am 24. September 2026
Ein Laufzeitfehler wartet, bis das Programm schon läuft. Der Code besteht jede Prüfung vor dem Start, läuft eine Weile korrekt und erreicht dann eine Operation, die sich mit den Werten, die er in diesem Moment hat, nicht ausführen lässt. Diese Funktion funktioniert für eine Liste und scheitert an einer anderen:
85.0
Traceback (most recent call last):
File "main.py", line 5, in <module>
print(average([]))
^^^^^^^^^^^
File "main.py", line 2, in average
return sum(scores) / len(scores)
~~~~~~~~~~~~^~~~~~~~~~~~~
ZeroDivisionError: division by zero
Der erste Aufruf gibt 85.0 aus. Der zweite Aufruf übergibt eine leere Liste, also ist len(scores) gleich 0, und die Division ist unmöglich. An der Grammatik war nichts falsch, deshalb ist das kein Syntaxfehler. Das Problem besteht nur bei bestimmten Daten, und darum kann ein Laufzeitfehler auftauchen, nachdem ein Programm hundertmal korrekt funktioniert hat.
Was bei einem Laufzeitfehler passiert
- Das Programm erreicht eine Operation, hier
sum(scores) / len(scores). - Die Laufzeitumgebung prüft sie, bevor sie sie ausführt. CPython testet den Divisor vor dem Teilen, die JVM prüft jeden Array-Index, und Python prüft, ob ein Schlüssel im Dictionary existiert, bevor es seinen Wert zurückgibt.
- Die Prüfung schlägt fehl, also erzeugt die Laufzeitumgebung ein Fehlerobjekt. In Python und Java ist dieses Objekt eine Ausnahme, und es hält die Fehlerart, eine Meldung und den Ort fest, an dem der Fehler passiert ist.
- Die Laufzeitumgebung sucht Code, der diese Fehlerart behandelt, zuerst in der aktuellen Funktion, dann in der Funktion, die sie aufgerufen hat, und so weiter nach außen.
- Behandelt nichts den Fehler, hält das Programm an. Python gibt einen Traceback aus und beendet sich mit Status 1. Java gibt einen Stacktrace aus, der mit
Exception in thread "main"beginnt.
Sprachen ohne diese Prüfungen verhalten sich anders. C prüft weder Array-Indizes noch Zeiger, also verfälscht ein fehlerhafter Speicherzugriff entweder unbemerkt Daten, oder das Betriebssystem beendet das Programm mit einem Segmentation Fault.
Alles, was das Programm vor der fehlschlagenden Zeile getan hat, ist bereits passiert. Diese Schleife gibt drei Farben aus, bevor sie an der vierten scheitert:
red
green
blue
Traceback (most recent call last):
File "main.py", line 4, in <module>
print(colors[i])
~~~~~~^^^
IndexError: list index out of range
Wie du einen Traceback liest
Lies einen Python-Traceback von unten nach oben. Die letzte Zeile nennt die Fehlerart und die Meldung: ZeroDivisionError: division by zero. Die Zeilen darüber listen die Kette der Aufrufe auf, der älteste zuerst und der jüngste zuletzt. Im ersten Beispiel hat Zeile 5 average aufgerufen, und in Zeile 2, innerhalb von average, ist die Division gescheitert.
Die Zeile, in der der Fehler passiert ist, ist nicht immer die Zeile, die du ändern musst. Zeile 2 von average ist korrekt. Die eigentliche Frage ist, wie eine leere Liste dorthin gelangt ist. Verfolg den falschen Wert also zurück bis zu seiner Herkunft und behebe ihn dort. Läuft ein Traceback durch Bibliotheksdateien, die du nicht geschrieben hast, such die letzte Zeile, die auf deine eigene Datei zeigt.
Häufige Laufzeitfehler
Jede dieser Meldungen stammt aus Python 3.12.
| Fehler | Beispiel | Meldung |
|---|---|---|
ZeroDivisionError | 10 / 0 | division by zero |
IndexError | ["red", "green", "blue"][3] | list index out of range |
KeyError | {"theme": "dark"}["font"] | 'font' |
ValueError | int("twenty") | invalid literal for int() with base 10: 'twenty' |
TypeError | "Total: " + 5 | can only concatenate str (not "int") to str |
AttributeError | .upper() auf None aufrufen | 'NoneType' object has no attribute 'upper' |
FileNotFoundError | open("missing.txt") | [Errno 2] No such file or directory: 'missing.txt' |
RecursionError | eine Funktion, die sich endlos selbst aufruft | maximum recursion depth exceeded |
Java hat direkte Entsprechungen, etwa ArithmeticException, ArrayIndexOutOfBoundsException, NumberFormatException und NullPointerException. Eine Ganzzahldivision durch null, die nichts fängt, gibt in Java Folgendes aus:
Exception in thread "main" java.lang.ArithmeticException: / by zero
JavaScript ist bei Zahlen nachsichtiger: 10 / 0 ergibt Infinity, keinen Fehler. Es scheitert, wenn du einen Wert benutzt, der nicht da ist. Node.js gibt das hier für user.name aus, wenn user gleich undefined ist:
TypeError: Cannot read properties of undefined (reading 'name')
Wie du einen Laufzeitfehler behebst
- Reproduzier ihn. Führ das Programm mit derselben Eingabe erneut aus und bestätige, dass du denselben Fehler bekommst.
- Lies die letzte Zeile des Tracebacks und such dann die passende Zeile in deinem eigenen Code.
- Sieh dir die beteiligten Werte an. Gib sie direkt vor der fehlschlagenden Zeile aus oder halte dort mit einem Breakpoint im Debugger an.
- Behebe die Ursache. Korrigier den Index, sichere den Sonderfall ab oder prüf die Eingabe, bevor du sie verwendest.
Bei der Funktion average besteht die Lösung darin, zu entscheiden, was der Durchschnitt von gar keinen Punktzahlen sein soll, und das im Code festzuhalten:
85.0
0
Manche Fehler liegen außerhalb deiner Kontrolle: eine gelöschte Datei, ein Netzwerk mit Zeitüberschreitung, ein Nutzer, der Buchstaben eintippt, wo eine Zahl hingehört. Die kannst du nicht durch Korrekturen am Code verhindern, also fängst du sie mit Ausnahmebehandlung ab und entscheidest, was das Programm als Nächstes tut. Was du nicht tun solltest: einen Bug in ein try wickeln und verstecken. Ein IndexError aus einer Schleife, die einen Schritt zu weit zählt, ist ein Fehler, den du beheben musst, keiner, den du fangen solltest.
Laufzeitfehler unter Windows und in Excel
Der Begriff taucht auch außerhalb deines eigenen Codes auf. Ein Windows-Dialog mit dem Titel Microsoft Visual C++ Runtime Library und den Worten Runtime Error! bedeutet, dass ein in C++ geschriebenes Programm auf einen fatalen Fehler gestoßen ist und die C++-Laufzeitbibliothek es beendet hat. Als Nutzer kannst du diesen Code nicht ändern, also helfen meist ein Update des Programms, das Reparieren oder Neuinstallieren der Pakete Microsoft Visual C++ Redistributable und bei Spielen ein Update des Grafiktreibers.
In VBA geschriebene Excel-Makros melden nummerierte Laufzeitfehler. Run-time error '9': Subscript out of range bedeutet, dass das Makro ein Arbeitsblatt oder ein Array-Element angefordert hat, das nicht existiert, und Run-time error '1004' ist ein allgemeiner Fehler, der auftritt, wenn eine Operation auf einer Arbeitsmappe, einem Blatt oder einem Bereich scheitert. Das Prinzip ist dasselbe wie in Python: Gültiger Code ist auf einen Wert gestoßen, mit dem er nicht umgehen konnte.
Wie es weitergeht
Laufzeitfehler haben zwei Geschwister: den Syntaxfehler, der vor dem Programmstart gefunden wird, und den Logikfehler, der überhaupt keine Meldung erzeugt. Wie du dich von Laufzeitfehlern erholst, statt abzustürzen, erklärt Ausnahmebehandlung, danach die Python-Anleitungen zu Ausnahmen und zum Debuggen von Fehlern. Im Python-Kurs schreibst und reparierst du solchen Code in jeder Lektion.
Häufig gestellte Fragen
Was ist der Unterschied zwischen einem Laufzeitfehler und einem Syntaxfehler?
Warum bekomme ich ständig Laufzeitfehler?
Was bedeutet Runtime Error auf LeetCode?
None-Wert oder eine so tiefe Rekursion, dass der Stack überläuft. Führ die fehlschlagende Eingabe von der Ergebnisseite selbst aus und prüf die Randfälle: ein leeres Array, ein einziges Element und die größte erlaubte Größe.Ist ein Laufzeitfehler dasselbe wie eine Ausnahme?
RuntimeException außerdem der Name einer bestimmten Familie von Ausnahmen, der ungeprüften wie NullPointerException.