← Все вопросы

TabError: inconsistent use of tabs and spaces — как исправить смешение табов и пробелов?

Задан 28 месяцев назад928 просмотров2 ответа
7

Код выглядит ровно, отступы на месте, но Python падает с TabError: inconsistent use of tabs and spaces in indentation. Я не понимаю, в чём проблема — всё же выровнено! Как починить смешение табов и пробелов?

2 ответа

10
✓ Принятый ответ — помог автору

TabError значит: в отступах перемешаны табуляции и пробелы. Глазами код выглядит одинаково, но Python видит, что одни строки сдвинуты табами, а другие — пробелами, и отказывается угадывать, что вы имели в виду.

Проблема обычно невидима:

def f():
    x = 1      # отступ пробелами
	y = 2      # отступ табом — TabError!

Здесь первая строка тела сдвинута пробелами, вторая — табом. Выглядит ровно, но это разные символы.

Как исправить:

  1. Настройте редактор на пробелы. Включите опцию вроде «Insert spaces instead of tabs» / «Spaces for indentation» и задайте размер 4. Тогда Tab будет вставлять 4 пробела.
  2. Покажите невидимые символы (whitespace/render whitespace) — увидите, где затесался таб (часто рисуется стрелкой →).
  3. Конвертируйте всё в пробелы. В большинстве редакторов есть команда «Convert Indentation to Spaces» или «Untabify». В VS Code: палитра команд → «Convert Indentation to Spaces».

Общее правило стиля Python (PEP 8): используйте только пробелы, по 4 на уровень, и никогда не смешивайте их с табами в одном файле. После конвертации в пробелы TabError исчезнет.

4

Это часто случается после копипасты кода с сайта или из чужого файла, где были табы, а вы дальше пишете пробелами. Самое надёжное лечение — выделить весь файл и применить «преобразовать отступы в пробелы», затем сохранить. Заодно настройте редактор показывать пробелы как точки, а табы — стрелками, чтобы видеть проблему сразу.

Ваш ответ

, чтобы ответить на вопрос.