Layer 8Ehrlicher Tech-Support
SoftwareSchweregrad: AnfängerfehlerTabError: inconsistent use of tabs and spaces in indentation

TabError: inconsistent use of tabs and spaces

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. 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. 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. 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. 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. 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.

Zuletzt geprüft am . Dokumentation altert – ein Datum daneben ist der einzige ehrliche Umgang damit.

Auch zu finden unter

Verwandte Fehler

SWAnfängerfehlerexternally-managed-environment

pip: error: externally-managed-environment

pip install bricht mit 'externally-managed-environment' ab? So installierst du Python-Pakete korrekt per venv oder pipx statt am System.

SWAnfängerfehlerModuleNotFoundError

Python: ModuleNotFoundError: No module named X

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

PyTorch: Expected all tensors to be on the same device

Modell auf der GPU, Daten auf der CPU: PyTorch verschiebt nichts von allein. Warum das so ist und wie beide Seiten auf dasselbe Gerät kommen.

SWLästigCERTIFICATE_VERIFY_FAILED

pip: SSL: CERTIFICATE_VERIFY_FAILED

pip lädt keine Pakete wegen SSL-Zertifikatsfehler? Meist schneidet ein Firmen-Proxy mit oder die Zertifikate sind veraltet — beides ist lösbar.