IndentationError: неверный отступ, не соответствует ни одному уровню внешнего отступа, хотя отступ выглядит корректно
Описание проблемы:
Я столкнулся с ошибкой при компиляции следующего кода на Python:
IndentationError: unindent does not match any outer indentation level
Вот сам код:
import sys
def Factorial(n): # Возвращает факториал
result = 1
for i in range(1, n):
result = result * i
print "факториал равен", result
return result
Мне интересно, почему возникает эта ошибка? Как её можно исправить?
5 ответ(ов)
Одна из возможных причин этой ошибки может заключаться в том, что в вашем коде используются пробелы в сочетании с табуляцией для отступов. Попробуйте выполнить поиск и замену, чтобы все табуляции заменить на несколько пробелов.
Попробуйте следующий код:
import sys
def Factorial(n): # возвращает факториал
result = 1
for i in range(1, n):
result = result * i
print("factorial is", result)
return result
print(Factorial(10))
Обратите внимание на исправленный синтаксис print
, который теперь соответствует стандартам Python 3. Также учтите, что в цикле for
в range
следует указать n+1
, чтобы учесть значение n
.
Чтобы легко проверить наличие проблем с табуляцией и пробелами, вы можете выполнить следующую команду:
python -m tabnanny yourfile.py
Или, конечно, вы можете просто правильно настроить свой редактор 😃
Судя по моему опыту, когда я сталкивался с этой ошибкой, это всегда было связано с тем, что я каким-то образом перепутал табуляции и пробелы в своем редакторе. Убедитесь, что вы используете однотипное форматирование, чтобы избежать подобных проблем.
Если вы используете Vim, нажмите клавишу Esc
, а затем введите
gg=G
Эта команда автоматически отформатирует (переведёт в отступы) весь текст в вашем файле и устранит лишние пробелы, которые вы могли вставить.
Если вы используете редактор IDLE для Python, можете следовать следующим шагам, как предлагается в одном из похожих сообщений об ошибках:
Выберите весь код, например, с помощью сочетания клавиш Ctrl + A.
Перейдите в меню "Формат" (Format) и выберите "Убрать табуляцию" (Untabify Region).
Дважды проверьте, что отступы вашего кода остались корректными, сохраните изменения и запустите программу заново.
Я использую Python 2.5.4.
UnicodeEncodeError: 'ascii' кодек не может закодировать символ u'\xa0' на позиции 20: номер не в диапазоне (128)
Как изменить порядок столбцов в DataFrame?
Получение текущей даты в формате YYYY-MM-DD в Python
Как проверить тип NoneType в Python?
Использование @property против геттеров и сеттеров