首页 文章

IndentationError:unindent与任何外部缩进级别都不匹配

提问于
浏览
422

当我编译下面的Python代码时,我得到了

IndentationError:unindent与任何外部缩进级别都不匹配


import sys

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

为什么?

22 回答

  • 7

    如果您正在使用Vim,请单击“转义”然后键入

    GG = G

    这个自动缩进所有内容,并清除你抛出的任何空间 .

  • 0

    看起来是一个缩进问题 . 您不必在Python中匹配大括号,但您必须匹配缩进级别 .

    防止空格/制表符问题的最佳方法是在文本编辑器中显示不可见的字符 . 这将为您提供一种快速方法来防止和/或解决与缩进相关的错误 .

    此外,注入复制粘贴代码是此类问题的常见来源 .

  • 0

    如果使用记事本,请使用扩展搜索模式“替换”以查找\ t并替换为四个空格 .

  • 0

    Atom

    Packages > Whitespace > Convert Spaces to Tabs
    

    然后再次检查您的文件缩进:

    python -m tabnanny yourFile.py
    

    要么

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

    对于Atom用户来说, Packages ->whitspace -> remove trailing whitespaces 这对我有用

  • 0

    昨天我遇到了同样的问题,这是缩进错误,是使用了崇高的文本编辑器 . 花了我几个小时试图解决它,最后我最终将代码复制到VI文本编辑器,它只是工作正常 . ps python太空白敏感,请确保不要混合空格和制表符 .

  • 491

    IMPORTANTSpaces are the preferred method - 参见PEP008 IndentationTabs or Spaces? . (感谢@Siha . )

    对于 Sublime Text 用户:

    设置 Sublime Text 以使用标签进行缩进: View - > Indentation - > Convert Indentation to Tabs

    在上面的同一子菜单中也取消选中 Indent Using Spaces 选项 . 这将立即解决此问题 .

  • 4

    要轻松检查选项卡/空格的问题,您可以实际执行此操作:

    python -m tabnanny yourfile.py
    

    或者你当然可以正确设置你的编辑器:-)

  • 2

    你确定你没有在缩进空白处混合标签和空格吗? (这会导致错误 . )

    注意,建议您不要在Python代码中使用选项卡 . 见style guide . 您应该配置记事本以插入选项卡的空格 .

  • 9

    每当我遇到这个错误时,都是因为我在编辑器中混淆了制表符和空格 .

  • 0

    其他海报可能是正确的...可能有空格与您的标签混合 . 尝试执行搜索和替换以使用一些空格替换所有选项卡 .

    试试这个:

    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)
    
  • 0

    如果您使用Python的IDLE编辑器,您可以按照其中一条类似的错误消息进行操作:

    1)选择所有,例如Ctrl A

    2)转到格式 - > Untabify Region

    3)仔细检查您的缩进是否仍然正确,保存并重新运行您的程序 .

    我正在使用Python 2.5.4

  • 197

    行: result = result * i 应该缩进(它是for循环的主体) .

    或者 - 您有混合空格和制表符

  • 1

    只是一个补充 . 我在记事本中的两个缩进都有类似的问题 .

    • 未接受的缩进

    • 外部缩进级别

    转到---->搜索选项卡---->点击 replace ---->点击下面的单选按钮 Extended >现在用四个空格替换\ t

    转到---->搜索选项卡---->点击 replace ---->点击下面的单选按钮 Extended --->现在替换为\ n

  • 1

    这可能是因为它上面的函数没有以相同的方式缩进 . 即

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

    这是因为标签和空格混合在一起 . 您可以删除所有空格并使用制表符替换它们 .

    或者,试着写下这个:

    #!/usr/bin/python -tt
    

    在代码的开头 . 此行解决了制表符和空格之间的任何差异 .

  • 34

    就我而言,问题是Eclipse上的pydev配置

    pydev @ Eclipse

  • 4

    如果您使用Komodo编辑器,您可以在其中一条类似的错误消息中执行操作:

    1)选择所有,例如Ctrl A

    2)转到代码 - > Untabify Region

    3)仔细检查您的缩进是否仍然正确,保存并重新运行您的程序 .

    我正在使用Python 3.4.2

  • 15

    如果您使用Sublime文本进行python开发,可以使用Anaconda软件包避免错误 . 安装Anaconda后,

    在崇高中打开你的文件,右键单击空白区域选择anaconda点击autoformat DONE或按CTRL ALT R.

  • -3

    由于我意识到 spyder 没有特定的答案,我将添加一个:基本上,仔细查看你的 if 语句并确保所有 ifelifelse 具有相同的间距,就像它们在开始时在同一行中一样所以:

    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!")
    
  • 4

    我定义了一个函数,但除了函数注释之外没有任何内容......

    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
    

    在任何情况下,请务必明确 why 这是一个空函数 - 对于您自己或您的同行将使用您的代码

  • 120

    即使我也遇到过同样的问题,后来我发现有一个编码问题 . 我建议你也改变你的编辑器 . 最好的python友好的IDE或编辑器是pycharm,sublime,vim for linux .

相关问题