Python LinuxWindowsmacOS

Python: IndentationError — unexpected indent, смесь табов и пробелов

  • Обновлено
  • Чтение ≈ 4 минуты

Краткий ответ

Используйте единый стиль отступов и настройте редактор.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Как найти проблему
  5. Как исправить массово
  6. Типичные случаи
  7. Предотвращение

#Что означает ошибка

Сообщение
IndentationError

IndentationError: unexpected indent, expected an indented block и TabError: inconsistent use of tabs and spaces — ошибки отступов Python. Блоки кода в Python определяются отступами, поэтому смешивать табы и пробелы или сдвигать строки произвольно нельзя.

Сообщение указывает номер строки, но настоящая ошибка часто в строке выше: цикл или условие без тела, лишний пробел в продолжении.

Лучше всего настроить редактор так, чтобы проблема не возникала.

Используйте единый стиль отступов и настройте редактор.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Табы и пробелыСмесь.Один отступ глубже, чем требует if/def/forОткройте строку из traceback и сопоставьте с окружающим блоком.
Лишний отступКод.Смешаны табуляция и пробелы в одном блокеВключите отображение пробелов и единый стиль редактора.
КопированиеФорматирование.Перед блоком отсутствует двоеточиеИсправьте синтаксис строки-условия, а не только отступы.
РедакторНастройка.Автоматическое форматирование нарушило вложенностьСверьте git diff и восстановите правильную логику блока.

#Пошаговое решение

  1. Откройте указанную строку и строку вышеСкопируйте полный traceback и откройте в редакторе .py файл, указанный после File "...", line N. Перейдите к строке N через Ctrl+G (VS Code) и посмотрите также предыдущие строки: отступ может быть лишним или пропущено двоеточие после if, for, def, try и т. п. Не исправляйте ошибку механическим удалением пробелов, пока не выяснили ожидаемую вложенность блока.
  2. Включите показ пробельных символовВ VS Code откройте меню «Вид» → «Внешний вид» → «Отображать пробелы» (в разных версиях можно воспользоваться настройкой Editor: Render Whitespace и выбрать all). Внизу редактора нажмите обозначение Spaces: 4 или Tab Size; по видимым символам определите строки, содержащие табуляцию. В Python уровень отступа должен соответствовать логике блока. При ошибке TabError чаще всего в одной группе смешаны табы и пробелы.
  3. Преобразуйте отступы в пробелыЕсли проект использует четыре пробела, выделите нужный файл в VS Code, откройте палитру команд Ctrl+Shift+P → Convert Indentation to Spaces. Установите размер отступа 4 только при согласовании со стилем проекта; затем проверьте вложенность функций, циклов, условий и многострочных выражений. Эта команда может затронуть весь файл, поэтому перед ней сохраните исходную версию или проверьте git diff. Для редактора с другими настройками используйте эквивалентную команду, не заменяйте табы во всех файлах вслепую.
  4. Запустите проверкуОткройте встроенный терминал в папке скрипта и запустите python -m tabnanny путь/к/файлу.py — подставьте реальный путь, содержащий пробелы заключите в кавычки. Если tabnanny выводит предупреждение о неоднозначном отступе, исправьте указанную строку. Затем выполните python -m py_compile путь/к/файлу.py: это проверка синтаксиса и создание кэша __pycache__, не запуск бизнес-логики программы. Отсутствие вывода при коде возврата 0 означает, что компиляция успешна.
  5. Настройте .editorconfigДля команды добавьте в корень проекта файл .editorconfig с настройками root = true, [*.py], indent_style = space, indent_size = 4 (каждую запись на отдельной строке) и включите поддержку EditorConfig в редакторе. Не меняйте настройку проекта без согласования, если исходный код придерживается другой схемы. Запустите обычные тесты: компиляция гарантирует корректность синтаксиса, но не логики отступов.

#Как найти проблему

Откройте файл и включите отображение пробельных символов: VS Code — «Вид → Отображать пробельные символы» или Ctrl+Shift+P → Toggle Render Whitespace; PyCharm — «Settings → Editor → General → Appearance → Show whitespaces». Табы показываются стрелками, пробелы — точками. Автоматически найти табы можно командой grep -nP "\t" файл.py или python -m tabnanny файл.py.

#Как исправить массово

В VS Code после резервной копии выделите нужный файл и воспользуйтесь палитрой команд Convert Indentation to Spaces, затем проверьте все уровни вложенности. Команды массовой замены sed и expand не понимают синтаксис Python и могут изменить семантику блоков; форматтер Black также не обязан восстанавливать сломанные отступы. После правки выполните python -m tabnanny файл.py и python -m py_compile файл.py.

#Типичные случаи

if x: без тела — добавьте pass. Отступ в 3 пробела вместо 4 в середине блока. Строки, скопированные из чата или сайта, где табы заменены неразрывными пробелами (U+00A0) — удалите их и введите отступ заново. Многострочные выражения в скобках отступа не требуют, а обратный слеш \ в конце строки не должен сопровождаться пробелом.

#Предотвращение

В VS Code задайте "editor.insertSpaces": true и "editor.tabSize": 4, создайте в проекте .editorconfig с indent_style = space и indent_size = 4. Включите линтер: pip install flake8, затем flake8 файл.py — он сообщит об E101 и W191 ещё до запуска.

Linux · Терминал (Bash)Команда
Диагностика отступов и компиляция. Альтернативные редакторские команды преобразования пробелов выполняются через IDE после проверки diff.
# Подставьте имя существующего файла .py вместо example.py
python -m tabnanny example.py
python -m py_compile example.py

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.