TabError: inconsistent use of tabs and spaces — как исправить смешение табов и пробелов?
Код выглядит ровно, отступы на месте, но Python падает с TabError: inconsistent use of tabs and spaces in indentation. Я не понимаю, в чём проблема — всё же выровнено! Как починить смешение табов и пробелов?
2 ответа
TabError значит: в отступах перемешаны табуляции и пробелы. Глазами код выглядит одинаково, но Python видит, что одни строки сдвинуты табами, а другие — пробелами, и отказывается угадывать, что вы имели в виду.
Проблема обычно невидима:
def f():
x = 1 # отступ пробелами
y = 2 # отступ табом — TabError!
Здесь первая строка тела сдвинута пробелами, вторая — табом. Выглядит ровно, но это разные символы.
Как исправить:
- Настройте редактор на пробелы. Включите опцию вроде «Insert spaces instead of tabs» / «Spaces for indentation» и задайте размер 4. Тогда Tab будет вставлять 4 пробела.
- Покажите невидимые символы (whitespace/render whitespace) — увидите, где затесался таб (часто рисуется стрелкой
→). - Конвертируйте всё в пробелы. В большинстве редакторов есть команда «Convert Indentation to Spaces» или «Untabify». В VS Code: палитра команд → «Convert Indentation to Spaces».
Общее правило стиля Python (PEP 8): используйте только пробелы, по 4 на уровень, и никогда не смешивайте их с табами в одном файле. После конвертации в пробелы TabError исчезнет.
Это часто случается после копипасты кода с сайта или из чужого файла, где были табы, а вы дальше пишете пробелами. Самое надёжное лечение — выделить весь файл и применить «преобразовать отступы в пробелы», затем сохранить. Заодно настройте редактор показывать пробелы как точки, а табы — стрелками, чтобы видеть проблему сразу.