Глиф Учебники

IndentationError: ошибка отступа

Справочник · Python · 2 минуты чтения

В Python отступ — часть языка: им отмечают, какие строки входят в блок if, for, while, def. Правило одно: после строки с двоеточием : следующие строки сдвигаются вправо, обычно на четыре пробела, и у всех строк одного блока отступ одинаковый. IndentationError значит, что это правило нарушено в строке, номер которой указан в сообщении.

Правильные отступы выглядят так:

Python
x = 5
if x > 0:
    print("положительное")
    print("эта строка тоже внутри if")
print("а эта — уже после if")
Вывод
положительное
эта строка тоже внутри if
а эта — уже после if

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

Найдите своё сообщение — это последняя строка ошибки, IndentationError: … или TabError: ….

expected an indented blockпосле двоеточия нет отступа

Полное сообщение: IndentationError: expected an indented block after 'if' statement on line 1. После строки с двоеточием Python ждёт хотя бы одну строку с отступом, а её нет:

Текст
if x > 0:
print("положительное")

Сдвиньте строку вправо на четыре пробела. Если блок пока нечем заполнить, поставьте в него слово pass — «ничего не делать»:

Python
x = 5
if x > 0:
    pass
print("готово")
Вывод
готово

Дальше: «Как не ошибаться»

unexpected indentлишний отступ

Сообщение: IndentationError: unexpected indent. Строка сдвинута, хотя перед ней нет строки с двоеточием:

Текст
x = 5
    print(x)

Чаще всего так бывает после копирования кода с сайта или из сообщения: вместе с кодом копируются лишние пробелы в начале. Уберите отступ.

Дальше: «Как не ошибаться»

unindent does not matchотступ не совпал с блоком

Полное сообщение: IndentationError: unindent does not match any outer indentation level. Строку сдвинули назад, но не до уровня какого-либо блока:

Текст
if x > 0:
    print("a")
  print("b")

Здесь отступ два пробела, а бывает только ноль или четыре. Выровняйте строку по нужному блоку.

Дальше: «Как не ошибаться»

TabErrorтабуляция вперемешку с пробелами

Полное сообщение: TabError: inconsistent use of tabs and spaces in indentation. На вид отступы одинаковые, но в одних строках — пробелы, в других — знак табуляции (особый знак отступа). Python 3 такое смешение запрещает. Обычно это случается, когда код собран из разных мест.

Исправление — заменить все табуляции пробелами:

  • VS Code — Ctrl+Shift+P, команда Convert Indentation to Spaces;
  • IDLE — выделите весь текст (Ctrl+A) и выберите Format → Untabify Region;
  • в любом редакторе — удалить отступы в проблемных строках и поставить их заново клавишей Tab.

Thonny, IDLE и VS Code в файлах .py по нажатию Tab ставят четыре пробела, так что при наборе вручную смешения не бывает.

Как не ошибаться

Python сообщает об ошибке отступа ещё до запуска программы, поэтому ни одна строка не выполнится, пока отступы не исправлены.