Что сделать с “Неожиданным отступом” в Python?

Он меняет верхнюю полосу с баннером и носителем на нем и делает его полупрозрачным черным.

106
задан SilentGhost 19 June 2009 в 08:03
поделиться

6 ответов

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, которая решит проблему за вас. Это также сделает ваш код более читабельным.

126
ответ дан 24 November 2019 в 03:50
поделиться

У меня всегда срабатывала уловка:

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

Такое случалось со мной, когда я использовал vim, gedit или подобные редакторы.

Попробуйте использовать только 1 редактор для вашего кода.

2
ответ дан 24 November 2019 в 03:50
поделиться

Если отступы выглядят нормально, проверьте, есть ли в вашем редакторе параметр «Просмотр пробелов». Включение этого должно позволить найти, где смешаны пробелы и табуляции.

2
ответ дан 24 November 2019 в 03:50
поделиться

С использованием правильного отступа. Python распознает пробелы, поэтому вам нужно следовать его инструкциям по отступам для блоков, иначе вы получите ошибки с отступами.

8
ответ дан 24 November 2019 в 03:50
поделиться

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

Хотя вы можете использовать табуляции с Python, смешивание табуляции и пробела обычно приводит к ошибке, с которой вы сталкиваетесь . Замена табуляции на 4 пробела - рекомендуемый подход для написания кода Python.

15
ответ дан 24 November 2019 в 03:50
поделиться

В Python очень важен интервал, он дает структуру ваших блоков кода. Эта ошибка возникает, когда вы нарушаете структуру кода, например, так:

def test_function() :
   if 5 > 3 :
   print "hello"

В вашем файле также может быть сочетание табуляции и пробелов.

Я предлагаю вам использовать редактор с поддержкой синтаксиса Python, например PyScripter или Netbeans

21
ответ дан 24 November 2019 в 03:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: