Подтвердить что ты не робот

Почему я получаю "IndentationError: ожидается отложенный блок"?

if len(trashed_files) == 0 :
    print "No files trashed from current dir ('%s')" % os.path.realpath(os.curdir)
else :
    index=raw_input("What file to restore [0..%d]: " % (len(trashed_files)-1))
    if index == "*" :
        for tfile in trashed_files :
            try:
                tfile.restore()
            except IOError, e:
                import sys
                print >> sys.stderr, str(e)
                sys.exit(1)
    elif index == "" :
        print "Exiting"
    else :
        index = int(index)
        try:
            trashed_files[index].restore()
        except IOError, e:
            import sys
            print >> sys.stderr, str(e)
            sys.exit(1)

Я получаю:

        elif index == "" :
        ^
    IndentationError: expected an indented block
4b9b3361

Ответ 1

Как указано в сообщении об ошибке, у вас есть ошибка с отступом. Вероятно, это связано с комбинацией вкладок и пробелов.

Ответ 2

На самом деле есть несколько вещей, которые вы должны знать об отступах в Python:

Python действительно заботится об отступах.

В большинстве других языков отступ не является необходимым, но улучшает читаемость. В Python отступы заменяют ключевое слово begin/end или { } и поэтому необходимы.

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

Существуют разные ошибки отступов, и их чтение очень помогает:

1. "IndentationError: ожидается блок с отступом"

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

- У вас есть ":" без отступа блока.

Вот два примера:

Пример 1, без отступа блока:

Входные данные:

if 3 != 4:
    print("usual")
else:

Выход:

  File "<stdin>", line 4

    ^
IndentationError: expected an indented block

Выходные данные заявляют, что вам нужно иметь блок с отступом в строке 4 после оператора else:

Пример 2, блок с отступом:

Входные данные:

if 3 != 4:
print("usual")

Выход

  File "<stdin>", line 2
    print("usual")
        ^
IndentationError: expected an indented block

Выходные данные заявляют, что вам нужно иметь строку с отступом блока 2 после оператора if 3 != 4:

- Вы используете Python2.x и у вас есть сочетание табуляции и пробелов:

вход

def foo():
    if 1:
        print 1

Обратите внимание, что до, если есть вкладка, а до печати есть 8 пробелов.

Выход:

  File "<stdin>", line 3
    print 1
      ^
IndentationError: expected an indented block

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

  • Вы можете получить некоторую информацию здесь.
  • Удалите все вкладки и замените их четырьмя пробелами.
  • И настройте свой редактор, чтобы сделать это автоматически.

2. "IndentationError: неожиданный отступ"

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

- У вас есть блок с отступом без ":" перед ним.

Пример:

Входные данные:

a = 3
  a += 3

Выход:

  File "<stdin>", line 2
    a += 3
    ^
IndentationError: unexpected indent

Выходные данные утверждают, что он не ожидал отступ строки блока 2, тогда вы должны удалить его.

3. "TabError: непоследовательное использование табуляции и пробелов в отступе" (только python3.x)

  • Вы можете получить некоторую информацию здесь.
  • Но в основном это то, что вы используете табуляции и пробелы в своем коде.
  • Вы этого не хотите.
  • Удалите все вкладки и замените их четырьмя пробелами.
  • И настройте свой редактор, чтобы сделать это автоматически.


В конце концов, чтобы вернуться к вашей проблеме:

Просто посмотрите на номер строки ошибки и исправьте ее, используя предыдущую информацию.

Ответ 3

У меня была эта же проблема и я обнаружил (через этот ответ на аналогичный вопрос), что проблема заключалась в том, что я должным образом не отформатировал docstring. К сожалению, IDLE не дает полезной обратной связи здесь, но как только я исправил отступы docstring, проблема исчезла.

В частности --- плохой код, который генерирует ошибки отступов:

def my_function(args):
"Here is my docstring"
    ....

Хороший код, который позволяет избежать ошибок отступа:

def my_function(args):
    "Here is my docstring"
    ....

Примечание. Я не говорю об этой проблеме , но она может быть, потому что в моем случае это было!

Ответ 4

Вы можете проверить пробелы и вкладки. Вкладка по умолчанию - 4 пробела. Однако ваши совпадения "if" и "elif", поэтому я не совсем уверен, почему. Перейдите в "Параметры" в верхней строке и нажмите "Настроить IDLE". Проверьте ширину отступов справа в шрифтах/вкладках и убедитесь, что ваши отступы имеют много пробелов.

Ответ 5

Это просто проблема с отступом, поскольку Python очень строг, когда дело доходит до него.

Если вы используете Sublime, вы можете выбрать все, нажмите на нижнюю правую сторону рядом с "Python" и убедитесь, что вы проверяете "Отступ, используя пробелы", и выберите ширину закладки, чтобы она была последовательной, затем Преобразование отступов в пробелы для преобразования всех вкладок в пробелы.

Ответ 6

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

 def btnClick(numbers):
 global operator
 operator = operator + str(numbers)
 text_input.set(operator)

Note.its выдает мне ошибку, пока я не напишу ее таким образом, чтобы "давать пробелы", то это давало мне блок, как я пытаюсь показать вам в коде функции ниже

def btnClick(numbers):
___________________________
|global operator
|operator = operator + str(numbers)
|text_input.set(operator)