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
для использования вкладок для отступов:
View
→ Indentation
→ Convert 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.
даже я тоже сталкивался с той же проблемой, позже я обнаружил, что есть проблема с кодировкой. Я предлагаю вам слишком изменить ваш редактор.