IndentationError: unindent не соответствует ни одному внешнему уровню отступа - PullRequest
477 голосов
/ 29 января 2009

Когда я компилирую код Python ниже, я получаю

IndentationError: unindent не соответствует ни одному внешнему уровню отступа


import sys

def Factorial(n): # Return factorial
    result = 1
    for i in range (1,n):
        result = result * i
    print "factorial is ",result
    return result

Почему?

Ответы [ 25 ]

4 голосов
/ 01 августа 2012

Кажется, проблема с отступами. Вам не нужно сопоставлять фигурные скобки в Python, но вы do должны соответствовать уровням отступа.

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

Кроме того, внедрение кода с вставленной копией является распространенным источником для этого типа проблемы.

2 голосов
/ 28 июля 2015

для пользователей Atom, Packages ->whitspace -> remove trailing whitespaces это сработало для меня

1 голос
/ 26 июня 2014

У меня вчера была та же проблема, это была ошибка отступа, я использовал возвышенный текстовый редактор. я потратил много времени, пытаясь это исправить, и в конце концов я скопировал код в текстовый редактор VI, и он просто работал нормально. ps python слишком чувствителен к пробелам, не смешивайте пробел и табуляцию.

1 голос
/ 15 декабря 2018

Я пользовался ноутбуком Jupyter и попробовал почти все вышеперечисленные решения (адаптируясь к моему сценарию) безрезультатно. Затем я пошел построчно, удалил все пробелы для каждой строки и заменил табуляцией. Это решило проблему.

1 голос
/ 25 декабря 2018

Во-первых, просто чтобы напомнить вам, что есть логическая ошибка, лучше оставить результат = 1, иначе ваш результат будет равен = 0 даже после запуска цикла.

Во-вторых, вы можете написать это так:

import sys

def Factorial(n): # Return factorial
  result = 0
  for i in range (1,n):
     result = result * i

  print "factorial is ",result
  return result

Выход из строки сообщит оболочке python, что операторы FOR завершились. Если у вас есть опыт использования оболочки Python, вы можете понять, почему мы должны оставить строку.

1 голос
/ 07 декабря 2018

Поскольку я понимаю, что нет ответа, специфичного для spyder, я добавлю один: В общем, внимательно посмотрите на ваше утверждение if и убедитесь, что все if, elif и else имеют одинаковый интервал, то есть в начале они находятся в одной строке, вот так:

def your_choice(answer):
    if answer>5:
        print("You're overaged")
    elif answer<=5 and answer>1: 
            print("Welcome to the toddler's club!")
    else:
            print("No worries mate!")
1 голос
/ 10 декабря 2018

У меня была определена функция, но у нее не было никакого содержимого , кроме ее комментариев к функциям ...

def foo(bar):
    # Some awesome temporary comment.
    # But there is actually nothing in the function!
    # D'Oh!

выкрикнул:

  File "foobar.py", line 69

                                ^
IndentationError: expected an indented block

(обратите внимание, что строка, на которую указывает отметка ^, пуста)

-

Несколько решений:

1: Просто закомментируйте функцию

2: добавить комментарий к функции

def foo(bar):
    '' Some awesome comment. This comment could be just one space.''

3: добавить строку, которая ничего не делает

def foo(bar):
    0

В любом случае, убедитесь, что делает очевидным почему это пустая функция - для вас самих или для ваших коллег, которые будут использовать ваш код

1 голос
/ 13 ноября 2015

Просто дополнение. У меня была похожая проблема с обоими отступами в Notepad ++.

  1. Неожиданный отступ
  2. Внешний уровень отступа

    Перейдите на ----> вкладку Поиск ----> нажмите на заменить ----> нажмите кнопку-переключатель Расширенная ниже ---> Теперь заменить \ т с четырьмя пробелами

    Перейдите на ----> вкладку Поиск ----> нажмите на заменить ----> нажмите кнопку-переключатель Расширенная ниже ---> Теперь заменить \ п с ничего

0 голосов
/ 06 марта 2019

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

class junk: 
     """docstring is indented too much""" 
    def fun(): return   

IndentationError: unindent does not match any outer indentation level

0 голосов
/ 29 января 2018

Это происходит главным образом из-за редактора. Попробуйте изменить табуляцию на пробелы (4). Лучшая среда разработки для Python, удобная для Python, - это pycharm, sublime, vim для Linux. даже я тоже сталкивался с той же проблемой, но потом обнаружил, что есть проблема с кодировкой. Я предлагаю вам тоже сменить редактор.

...