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

cbr*_*lak 525 python indentation

当我编译下面的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
Run Code Online (Sandbox Code Playgroud)

为什么?

Kev*_*ghe 600

其他海报可能是正确的...可能有空格与您的标签混合.尝试进行搜索和替换,用几个空格替换所有选项卡.

试试这个:

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)
Run Code Online (Sandbox Code Playgroud)

  • 得到同样的问题atm :).SublimeText将空格显示为点,非常有用. (3认同)
  • 是的,我必须真正在最后两行的内环部分空间(仅在SO中).不知道为什么...... (2认同)
  • 我的第一行,"结果= 0"(这应该是1,感谢纠正)是间隔而其余的是标签,darn,不知道python是那样的 (2认同)

act*_*eek 241

重要提示: 空格是首选方法 - 请参阅PEP008 缩进制表符或空格?.(感谢@Siha.)

对于Sublime Text用户:

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

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

  • 同样在ATOM,Packages> Whitespace>将Spaces转换为Tabs,你将避免Python的语法错误头痛! (17认同)
  • 你说空格是首选的方法但你的答案要求人们要求sublime使用标签!我很迷惑 (11认同)
  • 另外,每当使用 Python 时,请确保在您使用的 IDE/文本编辑器中设置类似的选项 (2认同)
  • 空格是首选方法 - 请参阅 PEP008 [缩进](https://www.python.org/dev/peps/pep-0008/#indentation) 和 [制表符还是空格?](https://www.python.org /dev/peps/pep-0008/#制表符或空格)。Sublime 也可以设置为以这种方式执行此操作。 (2认同)

And*_*dré 129

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

python -m tabnanny yourfile.py
Run Code Online (Sandbox Code Playgroud)

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


zda*_*dan 38

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

注意,建议您不要在Python代码中使用选项卡.请参阅样式指南.您应该配置Notepad ++以为选项卡插入空格.

  • @BananaCode只要你使用ONLY标签或ONLY空格,从技术上讲,你选择哪个并不重要.虽然对于python,首选空格,请参阅我提到的链接. (3认同)

Dan*_*ana 18

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


Gat*_*ica 11

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

1)选择全部,例如Ctrl + A.

2)转到格式 - > Untabify Region

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

我正在使用Python 2.5.4


lor*_*isi 9

原子上

Packages > Whitespace > Convert Spaces to Tabs
Run Code Online (Sandbox Code Playgroud)

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

python -m tabnanny yourFile.py
Run Code Online (Sandbox Code Playgroud)

或者

>python
>>> help("yourFile.py")
Run Code Online (Sandbox Code Playgroud)


Wan*_*ung 9

如果您使用Colaboratory,那么您可以通过以下命令来避免错误:

  1. Ctrl+A
  2. Tab
  3. Shift+Tab

所有[制表符]缩进都转换为[空格]缩进。然后OK


Abg*_*gan 8

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

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


cba*_*ock 8

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

GG = G

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


plf*_*ick 7

对于它\xe2\x80\x99s 的价值,我的文档字符串缩进太多,这也会引发相同的错误

\n
class junk:\n     """docstring is indented too much"""\n    def fun(): return\n
Run Code Online (Sandbox Code Playgroud)\n

IndentationError: unindent does not match any outer indentation level

\n


小智 7

对于 Spyder 用户,请转到“ 源”>“修复缩进” 以立即修复问题


Jac*_*Lee 6

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


Rah*_*hka 6

我在Ubuntu操作系统中使用Sublime Text。要解决此问题,请访问:

\n

菜单视图\xe2\x86\x92缩进\xe2\x86\x92将缩进转换为制表符

\n


Mat*_*ahl 5

看起来是缩进问题。你不必匹配在Python大括号,但你必须匹配缩进层次。

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

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


Dev*_*vil 5

使用 Visual Studio 代码

如果您使用的是 vs 代码,它将使用以下简单步骤将所有混合缩进转换为空格或制表符。

  1. Ctrl + Shift + p

  2. 类型 indent using spaces

  3. Enter