IndentationError: ошибка отступа
В Python отступ — часть языка: им отмечают, какие строки входят в блок if, for, while, def. Правило одно: после строки с двоеточием : следующие строки сдвигаются вправо, обычно на четыре пробела, и у всех строк одного блока отступ одинаковый. IndentationError значит, что это правило нарушено в строке, номер которой указан в сообщении.
Правильные отступы выглядят так:
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 — «ничего не делать»:
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: после двоеточия и Enter он сам ставит отступ.
- Сдвинуть несколько строк влево: в VS Code — выделите их и нажмите
Shift+Tab, в IDLE — Format → Dedent Region. - Копируя код, проверяйте отступ первой строки: лишние пробелы в начале дают
unexpected indent. - Если ошибка указывает на строку, которая выглядит правильно, посмотрите строку выше: часто сбит отступ там.
Python сообщает об ошибке отступа ещё до запуска программы, поэтому ни одна строка не выполнится, пока отступы не исправлены.