Вопрос по python – Что делать с «Неожиданным отступом» в python?

100

Как исправить ошибку «неожиданный отступ» в питоне?

& quot; Как исправить ошибку ... & quot;? Определив, где это произошло, и установив причину ошибки. В этом случае, делая отступ этой конкретной строки, похоже на то, что ожидает Python ... twalberg
Это звучит как проблема пробелов для меня, поэтому пример кода будет бесполезным. James McMahon
Неопределенный вопрос и не выбран ответ. rafael.js
Фрагмент кода, который выдает ошибку, поможет нам лучше понять вашу проблему. Пожалуйста, отредактируйте ваш вопрос, чтобы включить код. RBerteig

Ваш Ответ

14   ответов
8

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

3

вставлять пробелы вместо вкладок & quot; в вашем редакторе. Затем вы можете выбрать желаемую ширину вкладки, например 4. Вы можете найти эти опции в gedit в разделе edit -> gt; settings -> gt; editor.

Нижняя строка: ИСПОЛЬЗОВАТЬ ПРОСТРАНСТВА, а не вкладки

116

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

Unexpected indent. Эта строка кода имеет больше пробелов в начале, чем предыдущая, но предыдущая не является началом субблока (например, оператор if / while / for). Все строки кода в блоке должны начинаться с одинаковой строки пробела. Например:

>>> def a():
...   print "foo"
...     print "bar"
IndentationError: unexpected indent

Это особенно распространено при интерактивной работе с python: убедитесь, что вы не ставите лишние пробелы перед своими командами. (Очень раздражает при копировании и вставке примера кода!)

>>>   print "hello"
IndentationError: unexpected indent

Unindent does not match any outer indentation level. Эта строка кода имеет меньше пробелов в начале, чем предыдущая, но в равной степени она не соответствует ни одному другому блоку, частью которого она может быть. Python не может решить, куда он идет. Например, в следующем тексте предполагается, что окончательная версия будет частью предложения if или нет?

>>> if user == "Joey":
...     print "Super secret powers enabled!"
...   print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level

Expected an indented block. Эта строка кода имеет то же количество пробелов в начале, что и предыдущая, но ожидается, что последняя строка должна начать блок (например, оператор if / while / for, определение функции).

>>> def foo():
... print "Bar"
IndentationError: expected an indented block

Если вам нужна функция, которая ничего не делает, используйте «no-op» командаpass:

>>> def foo():
...     pass

Допускается смешивание табуляции и пробелов (по крайней мере, в моей версии Python), но Python предполагает, что табуляции имеют длину 8 символов, что может не соответствовать вашему редактору.Just say "no" to tabs. Большинство редакторов позволяют автоматически заменять их пробелами.

Лучший способ избежать этих проблем - всегда использовать одинаковое количество пробелов, когда вы делаете отступ для субблока, и в идеале использовать хорошую IDE, которая решит проблему за вас. Это также сделает ваш код более читабельным.

@ Jos & # xE9; RosasS & # xE1; enz Ваш комментарий спас мне столько неприятностей
Error: User Rate Limit Exceeded
Just say "no" to tabs.
1

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

Например, возьмите следующий скрипт:

def add_one(x):
    try:
        return x + 1
add_one(5)

Это возвращаетIndentationError: unexpected unindent когда проблема, конечно, отсутствуетexcept: заявление.

Моя точка зрения: проверьте код выше, где сообщается о неожиданном (не) отступе!

2

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

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

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

1

но проблема с отступами была найдена в текстовом редакторе Sublime.

Используйте Sublime text editor и построчно

1

посмотрите, есть ли у вашего редактора & quot; Просмотр пробелов & quot; вариант. Включение этого должно позволить найти, где пробелы и вкладки смешаны.

21

Эта ошибка возникает, когда вы портите структуру своего кода, например, так:

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

У вас также может быть сочетание вкладок и пробелов в вашем файле.

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
14

Turn on visible whitespace in whatever editor you are using and turn on replace tabs with spaces.

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

Error: User Rate Limit Exceeded
3

Python (терминал / консоль).

Обратите внимание, что интерпретатор интерпретирует пустую строку как конец выражения, поэтому, если вы вставите что-то вроде

def my_function():
    x = 3

    y = 7

интерпретатор интерпретирует пустую строку передy = 7 как конец выражения, т. е. что вы сделали определение своей функции, а следующая строка -y = 7 будет иметь неправильный отступ, потому что это новое выражение.

Error: User Rate Limit ExceededbutError: User Rate Limit Exceeded
2

& quot; весь ваш код & quot; & quot; ...

указать эту строку в переменной .. как,

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
17

чтобы выяснить, используете ли вы символы табуляции и пробелы

6

ступах,

просмотр - & gt; отступ - & gt; преобразовать отступ в пробел

Проблема, которую я описываю, вызвана редактором Sublime text. Та же проблема может быть вызвана и другими редакторами. По сути, проблема связана с тем, что Python хочет рассматривать отступы с точки зрения пробелов, а не различные редакторы, кодирующие отступы с точки зрения вкладок.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

что вам нужно сделать, это удалить пробелы или табуляции из начала следующих кодов

from django.contrib import admin

# Register your models here.
from .models import Myapp
admin.site.register(Myapp)

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