Python использует интервал в начале строки, чтобы определить, когда блоки кода начинаются и заканчиваются. Вы можете получить следующие ошибки:
Неожиданный отступ. Эта строка кода имеет больше пробелов в начале, чем предыдущая, но предыдущая не является началом субблока (например, оператор if / while / for). Все строки кода в блоке должны начинаться с одинаковой строки пробела. Например:
>>> def a():
... print "foo"
... print "bar"
IndentationError: unexpected indent
Это особенно распространено при интерактивном запуске python: убедитесь, что вы не ставите лишние пробелы перед своими командами. (Очень раздражает при копировании и вставке примера кода!)
>>> print "hello"
IndentationError: unexpected indent
Unindent не соответствует ни одному внешнему уровню отступа. Эта строка кода имеет меньше пробелов в начале, чем предыдущая, но в равной степени она не соответствует ни одному другому блоку, частью которого она может быть. Python не может решить, куда он идет. Например, в следующем тексте предполагается, что окончательная версия будет частью предложения if или нет?
>>> if user == "Joey":
... print "Super secret powers enabled!"
... print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level
Ожидается блок с отступом. Эта строка кода имеет то же количество пробелов в начале, что и предыдущая, но ожидается, что последняя строка должна начинать блок (например, оператор if / while / for) , определение функции).
>>> def foo():
... print "Bar"
IndentationError: expected an indented block
Если вам нужна функция, которая ничего не делает, используйте команду "no-op" pass :
>>> def foo():
... pass
Допускается смешивание табуляции и пробелов (по крайней мере, в моей версии Python), но Python предполагает, что табуляции имеют длину 8 символов, что может не соответствовать вашему редактору. Просто скажите «нет» вкладкам. Большинство редакторов позволяют автоматически заменять их пробелами.
Лучший способ избежать этих проблем - всегда использовать одинаковое количество пробелов, когда вы делаете отступ для субблока, и в идеале использовать хорошую IDE, которая решает эту проблему для вас. Это также сделает ваш код более читабельным.