Python WindowsLinux

Python: IndentationError: unexpected indent

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

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

IndentationError «unexpected indent» в Python возникает из-за смеси табов и пробелов или лишнего отступа. Настройте редактор на 4 пробела, выполните python -tt и исправьте отступы в указанной строке.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение

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

Сообщение
IndentationError: unexpected indent

В Python отступы — часть синтаксиса: они определяют блоки кода. IndentationError: unexpected indent говорит, что строка имеет отступ там, где он не ожидается; близкие ошибки — expected an indented block (после if/def нет тела) и unindent does not match any outer indentation level (отступ не совпадает ни с одним уровнем). Они почти всегда возникают из-за смеси табуляции и пробелов или копирования кода.

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

Возможная причинаКак узнатьЧто делать
Смесь табов и пробеловВ файле и табы, и пробелы.Строки выглядят выровненными, но ошибка есть.Приведите к пробелам.
Лишний отступСтрока сдвинута без причины.Ошибка указывает на строку.Уберите отступ.
Копирование кода из мессенджера или сайтаВставка принесла невидимые символы.Код скопирован из чата.Очистите отступы.
Отсутствует тело блокаПосле : нет кода.expected an indented block.Добавьте pass.

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

  1. Откройте строку из сообщенияВ сообщении IndentationError: unexpected indent найдите строку File "...", line N и откройте указанный Python-файл в VS Code через «Файл → Открыть файл». Нажмите Ctrl+G, введите N, перейдите к проблемной строке и сравните её со строками выше и ниже. Часто лишний отступ находится после уже закрытого блока или при копировании кода. Сначала сохраните копию или создайте отдельную ветку Git, затем исправляйте отступы именно этого участка; не удаляйте все пробелы во всём файле.
  2. Включите отображение пробеловВ VS Code откройте настройки Ctrl+, и найдите Render Whitespace; установите «all» на время проверки. В начале строк появятся видимые точки и стрелки табуляции. Сравните с ближайшими строками той же логической вложенности. В Python единицы отступа должны быть согласованными; если строка неожиданно сдвинута на один уровень, верните её к отступу соседних операторов того же блока. После сохранения снова запустите файл и посмотрите, не указывает ли новый номер на другую ошибку.
  3. Преобразуйте табы в пробелыЕсли редактор показывает смесь табуляций и пробелов, нажмите индикатор «Spaces»/«Tab Size» в правой нижней части VS Code и выберите «Преобразовать отступы в пробелы» (название зависит от локализации). Для обычного кода Python выберите 4 пробела на уровень. Прежде чем преобразовывать весь файл, проверьте его стиль и согласуйте изменения в командном проекте: это может создать большой ненужный diff. На копии сравните структуру блоков if, for, def и try до и после правки.
  4. Проверьте блокПроверьте двоеточия и границы блока: после if условие:, def имя(...):, class и т. п. первая строка тела должна иметь больший отступ; else, elif, except и finally обычно возвращаются к уровню соответствующего оператора. Если тело намеренно пусто, разрешён оператор pass с правильным отступом, но не вставляйте его автоматически в существующую рабочую логику. Для неожиданного отступа перед return или print сравните уровни с соседними инструкциями в функции.
  5. Запустите проверкуСохраните файл и в терминале проекта выполните python -m py_compile script.py, заменив имя файла на реальное. Python создаст служебные файлы в __pycache__; если синтаксис принят, команда обычно молчит. Затем выполните python -m tabnanny script.py для выявления неоднозначного смешения отступов. При новом сообщении вернитесь к указанной строке; успешная компиляция проверяет лишь синтаксис, а не правильность поведения программы — запустите и основные тесты проекта.
  6. Исправьте вставкуЕсли ошибочная строка скопирована из веб-страницы, удалите только её ведущие пробелы и введите их заново клавишей пробела. Внешне похожие неразрывные пробелы и смешанные табуляции могут быть плохо заметны; проверьте режим отображения пробелов. Не запускайте автоматическую замену всех пробелов в проекте. Если после копирования блок целиком оказался на неправильном уровне, сравните с исходником и восстановите структуру условных и циклических блоков.
  7. Используйте форматтерСредство Black может привести корректный файл к единому оформлению, но не восстанавливает произвольно сломанную структуру Python. Поэтому сначала исправьте IndentationError, выполните py_compile и тесты, лишь затем при необходимости форматируйте копию или отдельную ветку проекта. Проверьте разницу через git diff, прежде чем сохранять изменения. Если форматтер удаляет или изменяет множество строк вне проблемного участка, отмените его результат и уточните принятую политику форматирования команды.
  8. Настройте редакторЧтобы предотвратить ошибки в новых файлах, настройте в редакторе Python-отступ 4 пробела и при наличии проектного .editorconfig прочитайте его параметры indent_style и indent_size. Не перезаписывайте общий файл конфигурации редактора, не согласовав изменения с командой. Откройте новый тестовый файл и проверьте, что клавиша Tab вставляет соответствующее количество пробелов. При повторении ошибки сообщите номер строки и минимальный фрагмент кода, убрав пароли, ключи и личные данные.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Две альтернативные проверки того же файла в терминале проекта, без редактирования исходника.
    Linux · Терминал (Bash)Команда
    Две альтернативные проверки того же файла в терминале проекта, без редактирования исходника. Команда py_compile создаёт __pycache__.
    python -m py_compile script.py
    python -m tabnanny script.py
    Вариант 2Пример корректных отступов (4 пробела) и пустого блока.
    Python
    Пример корректных отступов (4 пробела) и пустого блока.
    def check(n):
        if n > 0:
            print("positive")
        else:
            pass
        return n

Строка вида grep -nP "\t" script.py покажет все строки с символом табуляции. Если ошибка появилась после копирования кода из веб-страницы, возможна подмена пробелов на неразрывные (символ \xa0): найдите их командой grep -nP "\xA0" script.py и замените. В Jupyter Notebook ошибка часто возникает при вставке нескольких ячеек подряд. Начиная с Python 3, смешивание табов и пробелов в одном блоке запрещено, поэтому выбирайте один стиль для проекта — стандарт PEP 8 рекомендует 4 пробела. Документация — PEP 8.

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

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

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