Python bricht ab, weil Tabs und Leerzeichen gemischt wurden. Der Code sieht korrekt aus – die Einrückung ist es nicht.
Aufwand:
ca. 15 Min.
Das Symptom
Das Skript bricht mit einem TabError ab und beschwert sich über eine
inkonsistente Verwendung von Tabs und Leerzeichen. Im Editor sieht die betroffene
Zeile völlig normal aus – exakt so weit eingerückt wie ihre Nachbarn.
Die „Layer 8“-Wahrheit
Dieser Fehler ist ein Lehrstück darüber, dass das Auge und der Interpreter zwei
verschiedene Dinge lesen. Optisch stehen zwei Zeilen bündig untereinander. Auf
Zeichenebene besteht die eine aus vier Leerzeichen und die andere aus einem Tabulator,
den der Editor zufällig ebenfalls vier Spalten breit darstellt. Für den Menschen ist
das identisch. Für Python sind es zwei völlig verschiedene Einrückungen.
Und Python kann sich hier keine Nachsicht leisten. In den meisten Sprachen ist
Einrückung Kosmetik – die Struktur steht in den Klammern. In Python ist die
Einrückung die Struktur. Sie entscheidet, was noch zur Schleife gehört und was
schon dahinter liegt. Eine mehrdeutige Einrückung bedeutet also ein mehrdeutiges
Programm, und weil Python nicht raten will, bricht es ab. Das ist keine Pedanterie,
das ist die einzige verantwortbare Reaktion.
Der Klassiker entsteht beim Zusammenkopieren aus mehreren Quellen: Der eigene Code
nutzt Leerzeichen, der eingefügte Ausschnitt aus dem Internet bringt Tabs mit, und
das Ergebnis sieht tadellos aus. Es ist nur eben kaputt.
Die echte, verifizierte Lösung
1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:
1.
Die unsichtbaren Zeichen sichtbar machen
Jeder brauchbare Editor kann Tabs und Leerzeichen darstellen. Sobald die Anzeige aktiv ist, springt die gemischte Einrückung sofort ins Auge – vorher ist sie buchstäblich unsichtbar.
2.
Sich für Leerzeichen entscheiden
Die Konvention für Python ist eindeutig: vier Leerzeichen pro Ebene. Das ist kein Geschmacksurteil, sondern der verbreitete Standard, an dem sich Werkzeuge und Bibliotheken orientieren.
3.
Die Datei automatisch umstellen lassen
Editoren bieten eine Funktion, die alle Tabs in Leerzeichen umwandelt. Sie erledigt in einer Sekunde, was von Hand fehleranfällig ist. Danach die Datei erneut ausführen.
4.
Den Editor richtig konfigurieren
Damit das Problem nicht wiederkehrt, wird der Editor so eingestellt, dass die Tab-Taste Leerzeichen einfügt. In vielen Projekten übernimmt eine Konfigurationsdatei diese Einstellung automatisch für alle Beteiligten.
5.
Gemischten Code erkennen
Besonders anfällig ist Code, der aus verschiedenen Quellen zusammenkopiert wurde. Was aus einem Webbrowser eingefügt wird, bringt oft die Einrückung des Ursprungs mit – und die passt selten zur eigenen.
Häufige Fragen (FAQ)
?Warum ist Python da so streng?
Weil die Einrückung bei Python die Struktur des Programms bestimmt – sie ersetzt die geschweiften Klammern anderer Sprachen. Wenn die Einrückung mehrdeutig ist, ist der Programmablauf mehrdeutig. Deshalb bricht Python lieber ab, als zu raten.
?Wie kann derselbe Code bei mir laufen und beim Kollegen nicht?
Weil Editoren Tabs unterschiedlich breit darstellen. Optisch kann eine Zeile korrekt eingerückt aussehen und trotzdem aus einer anderen Zeichenmischung bestehen. Das Auge sieht Ausrichtung, der Interpreter sieht Zeichen.
Belege
Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.
Der Editor ruckelt, die Lüfter drehen auf? Typische Verdächtige sind Erweiterungen und riesige Ordner — eingebaute Werkzeuge grenzen den Übeltäter ein.
Python meldet ModuleNotFoundError, obwohl das Paket installiert ist? Meist stimmt die Umgebung, der Import-Name oder der Dateiname nicht. So löst du es.
SWAnfängerfehlerRuntimeError: Expected all tensors to be on the same device