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 ]

548 голосов
/ 29 января 2009

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

Попробуйте это:

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)
222 голосов
/ 08 мая 2014

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

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

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

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

125 голосов
/ 05 февраля 2009

Чтобы легко проверить наличие проблем с табуляцией / пробелами, вы можете сделать это:

python -m tabnanny yourfile.py

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

35 голосов
/ 29 января 2009

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

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

16 голосов
/ 29 января 2009

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

9 голосов
/ 13 июня 2013

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

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

2) Перейти к формату -> Untabify Region

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

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

8 голосов
/ 29 января 2009

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

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

7 голосов
/ 07 мая 2015

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

гг = G

Это авто отступает все и очистит все пробелы, которые вы добавили

4 голосов
/ 20 марта 2014

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

4 голосов
/ 11 марта 2015

Вкл. Атом

перейти к

Packages > Whitespace > Convert Spaces to Tabs

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

python -m tabnanny yourFile.py

или

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