Ошибка отступления:без отступа не соответствует ни одному уровню внешнего отступа

StackOverflow https://stackoverflow.com/questions/492387

  •  20-08-2019
  •  | 
  •  

Вопрос

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

Ошибка отступления:без отступа не соответствует ни одному уровню внешнего отступа


import sys

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

Почему?

Это было полезно?

Решение

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

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

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)

Другие советы

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

Для Sublime Text Пользователи:

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

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

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

python -m tabnanny yourfile.py

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

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

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

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

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

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

2) Перейдите в Форматирование -> Отменить табуляцию региона

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

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

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

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

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

gg=G

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

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

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

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

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

На Атом

перейти к

Packages > Whitespace > Convert Spaces to Tabs

Затем проверьте еще раз отступ вашего файла:

python -m tabnanny yourFile.py

или

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

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

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

  1. Незамеченное углубление
  2. Уровень внешнего Углубления

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

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

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

Поскольку я понимаю, что нет конкретного ответа на 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!")

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

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

(обратите внимание, что строка the ^ отметить точки на пусто)

--

Множество решений:

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

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

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

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

def foo(bar):
    0

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

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

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

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

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

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

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

#!/usr/bin/python -tt

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

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

pydev @ Eclipse

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

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

2) Перейдите в Code -> Untabify Region (Код -> Отключить регион)

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

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

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

  1. откройте свой файл в sublime
  2. щелкните правой кнопкой мыши на открытых пространствах
  3. выбирай анаконду
  4. нажмите на автоформат
  5. ГОТОВО Или нажмите CTRL + ALT + R.

Как бы то ни было, моя строка документа имела слишком большой отступ, и это также выдает ту же ошибку

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

IndentationError: unindent does not match any outer indentation level

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

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

  • Инструменты.
  • Предпочтения.
  • Редактор.
  • Расширенные настройки.
  • Символы отступа -> Вкладки.

Затем я сбрасываю "неидентифицированную" строку с помощью клавиши tab.

По какой-то причине, без этой настройки, я получил призрак Иногда ошибка отступления.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top