Как исправить ошибку «неожиданный отступ» в Python?
Как исправить ошибку «неожиданный отступ» в Python?
Ответы:
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
Если вы хотите функцию , которая ничего не делает, использовать «не-оп» команду пропуск :
>>> def foo():
... pass
Разрешено смешивание табуляции и пробелов (по крайней мере, в моей версии Python), но Python предполагает, что длина табуляции 8 символов, что может не соответствовать вашему редактору. Просто скажите «нет» вкладкам. Большинство редакторов позволяют автоматически заменять их пробелами.
Лучший способ избежать этих проблем - всегда использовать постоянное количество пробелов при отступе во вложенном блоке и в идеале использовать хорошую среду IDE, которая решает проблему за вас. Это также сделает ваш код более читабельным.
except
части try
предложения. Код выглядит правильно (в том смысле, что строка без отступа должна находиться за пределами try
блока), но Python сообщает об этом как об ошибке «неожиданного отступа». Это исправлено добавлением except
, возможно, использованием pass
(как здесь )
В Python очень важен интервал, он дает структуру ваших блоков кода. Эта ошибка возникает, когда вы нарушаете структуру кода, например, так:
def test_function() :
if 5 > 3 :
print "hello"
В вашем файле также может быть сочетание табуляции и пробелов.
Я предлагаю вам использовать редактор с поддержкой синтаксиса Python, например PyScripter или Netbeans.
Включите видимые пробелы в любом редакторе, который вы используете, и включите замену вкладок пробелами.
Хотя вы можете использовать вкладки с Python, смешивание вкладок и пробелов обычно приводит к ошибке, с которой вы столкнулись. Замена табуляции на 4 пробела - рекомендуемый подход для написания кода Python.
Если вы пишете Python с использованием Sublime и получаете ошибки с отступом,
вид -> отступ -> преобразовать отступ в пробелы
Проблема, которую я описываю, вызвана текстовым редактором Sublime. Та же проблема может быть вызвана и другими редакторами. По сути, проблема связана с тем, что Python хочет обрабатывать отступы с точки зрения пробелов, в отличие от различных редакторов, кодирующих отступы с точки зрения вкладок.
Убедитесь, что вы используете в редакторе опцию «вставлять пробелы вместо табуляции». Затем вы можете выбрать ширину табуляции, например, 4. Вы можете найти эти параметры в gedit в разделе «Правка» -> «Настройки» -> «Редактор».
нижняя строка: ИСПОЛЬЗУЙТЕ ПРОБЕЛЫ, а не вкладки
Эта ошибка также может возникнуть при вставке чего-либо в интерпретатор Python (терминал / консоль).
Обратите внимание, что интерпретатор интерпретирует пустую строку как конец выражения, поэтому, если вы вставите что-то вроде
def my_function():
x = 3
y = 7
интерпретатор будет интерпретировать пустую строку перед y = 7
как конец выражения, то есть, что вы закончили определение своей функции, а следующая строка - y = 7
будет иметь неправильный отступ, потому что это новое выражение.
Одна проблема, о которой, похоже, не упоминалось, заключается в том, что эта ошибка может возникнуть из-за проблемы с кодом, который не имеет ничего общего с отступами.
Например, возьмем следующий сценарий:
def add_one(x):
try:
return x + 1
add_one(5)
Это возвращает, IndentationError: unexpected unindent
когда проблема, конечно же, заключается в отсутствии except:
оператора.
Моя точка зрения: проверьте код выше, в котором сообщается о неожиданном (не) отступе!
Если отступ выглядит нормально, посмотрите, есть ли в вашем редакторе опция «Просмотр пробелов». Включение этого должно позволить найти смешанные пробелы и табуляции.
У меня всегда срабатывала уловка:
Если у вас возник неожиданный отступ и вы видите, что весь код имеет идеальный отступ, попробуйте открыть его в другом редакторе, и вы увидите, какая строка кода не имеет отступа.
Это случилось со мной, когда я использовал vim, gedit или подобные редакторы.
Попробуйте использовать только 1 редактор для своего кода.
Просто скопируйте свой скрипт и поместите под "" "весь код" "" ...
укажите эту строку в переменной .. например,
a = """ your python script """
print a.replace('here please press tab button it will insert some space"," here simply press space bar four times")
# here we replacing tab space by four char space as per pep 8 style guide..
теперь выполните этот код в Sublime Editor, используя ctrl + b, теперь он будет печатать код с отступом в консоли. Это оно
Все, что вам нужно сделать, это удалить пробелы или табуляции в начале следующих кодов
from django.contrib import admin
# Register your models here.
from .models import Myapp
admin.site.register(Myapp)
Выполните следующую команду, чтобы решить эту проблему:
autopep8 -i <filename>.py
Это обновит ваш код и решит все ошибки отступов :)
Надеюсь, это решит
Notepad ++ давал правильное пространство вкладки, но проблема с отступом была наконец обнаружена в текстовом редакторе Sublime.
Используйте редактор Sublime text и переходите построчно
Отступы в Python важны, и это просто не для читабельности кода, в отличие от многих других языков программирования. Если в вашем коде есть пробелы или табуляция между последовательными командами, python выдаст эту ошибку, поскольку Python чувствителен к этому. Мы, вероятно, получим эту ошибку, когда скопируем и вставим код на любой Python. Обязательно определите и удалите эти пробелы с помощью текстового редактора, такого как Notepad ++, или вручную удалите пробелы из строки кода, в которой возникает ошибка.
Step1 :Gives error
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
Step2: L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]print(L[2: ])
Step3: No error after space was removed
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
OUTPUT: [[7, 8, 9, 10]]
Спасибо!