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

Когда я компилирую код 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

Зачем?

Ответ 1

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

Попробуйте следующее:

import sys

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

print Factorial(10)

Ответ 2

ВАЖНО: Пространства являются предпочтительным методом - см. PEP008 Indentation и вкладки или пробелы?. (Спасибо @Siha за это.)

Для Sublime Text пользователей:

Установите Sublime Text для использования вкладок для отступов: ViewIndentationConvert Indentation to Tabs

Снимите флажок Indent Using Spaces, а также в том же подменю выше. Это немедленно устранит эту проблему.

Ответ 3

Чтобы легко проверить проблемы с вкладками/пробелами, вы можете это сделать:

python -m tabnanny yourfile.py

или вы можете правильно настроить редактор правильно: -)

Ответ 4

Вы уверены, что вы не смешиваете вкладки и пробелы в белом пространстве? (Это приведет к этой ошибке.)

Обратите внимание, что вы не используете вкладки в коде Python. См. руководство по стилю. Вы должны настроить Notepad ++ для вставки пробелов для вкладок.

Ответ 5

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

Ответ 6

Если вы используете редактор Python IDLE, вы можете сделать то, что предлагает в одном из похожих сообщений об ошибках:

1) выбрать все, например, Ctrl + A

2) Зайдите в Формат → Удалить область

3) Проверьте правильность отступов, сохраните и перезапустите программу.

Я использую Python 2.5.4

Ответ 7

Строка: result = result * i должна быть отступом (это тело цикла for).

Или - у вас есть смешанные пробелы и символы табуляции

Ответ 8

Если вы используете Vim, нажмите escape, а затем введите

гг = G

Это автоматически отбрасывает все и очищает все пробелы, которые вы вложили.

Ответ 9

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

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

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

Ответ 10

Если вы используете блокнот ++, выполните "замену" в расширенном режиме поиска, чтобы найти \t и заменить на четыре пробела.

Ответ 11

Вкл Atom

перейдите к

Packages > Whitespace > Convert Spaces to Tabs

Затем снова проверьте свой отступ файла:

python -m tabnanny yourFile.py

или

>python
>>> help("yourFile.py")

Ответ 12

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

Ответ 13

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

  • Непрерывный отступ
  • Уровень внешнего отступов

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

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

Ответ 14

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

Ответ 15

Поскольку я понимаю, что нет никакого ответа, характерного для 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 club!")
    else:
            print("No worries mate!")

Ответ 16

Я определил функцию, но у нее не было никакого контента, кроме комментариев к функции...

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

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

Ответ 17

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

Ответ 18

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

Ответ 19

Это может быть связано с тем, что функция над ней не имеет отступов одинаково. то есть.

class a:
    def blah:
      print("Hello world")
    def blah1:
      print("Hello world")

Ответ 20

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

Или, Попробуйте написать это:

#!/usr/bin/python -tt

в начале кода. Эта строка разрешает любые различия между вкладками и пробелами.

Ответ 21

в моем случае проблема заключалась в конфигурации pydev на Eclipse

pydev @ Eclipse

Ответ 22

Если вы используете редактор Komodo, вы можете сделать так, как это предлагает в одном из похожих сообщений об ошибке:

1) выберите все, например. Ctrl + A

2) Перейдите в Code → Untabify Region

3) Двойная проверка вашего отступов по-прежнему правильная, сохранить и повторно запустить вашу программу.

Я использую Python 3.4.2

Ответ 23

Если вы используете Sublime-текст для разработки python, вы можете избежать ошибки, используя пакет Anaconda.После установки Anaconda,

  • открыть файл в возвышенном
  • щелкните правой кнопкой мыши по открытым пространствам
  • выберите anaconda
  • нажмите на автоформат
  • СОВЕРШЕННО ИЛИ Нажмите CTRL + ALT + R.

Ответ 24

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

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

IndentationError: unindent does not match any outer indentation level

Ответ 25

В intellij с плагином python, Ctrl + Shift + Alt для переформатирования документа исправили проблему отступа/табуляции/пробелов

Ответ 26

Для пользователей SPYDER: я использую spyder 3.3.2 с python 3.7.1, и я решил эту проблему, установив отступ для использования вкладок, выполнив следующие действия, нажав:

  • Инструменты.
  • Настройки.
  • Редактор.
  • Расширенные настройки.
  • Символы отступа → вкладки.

Затем я сбросил "неопознанную" строку, используя клавишу табуляции.

Почему-то без этой настройки я иногда получал призрачную IndentationError.

Ответ 27

После настройки вашего редактора после pep8 у вас все еще есть проблемы. Хороший трюк для решения этой проблемы заключается в замене четырех пробелов на одну вкладку. На самом деле python не поддерживает 4 пробела вместо 1 вкладки.

Ответ 28

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