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

当我编译下面的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 

为什么?

其他海报可能是正确的…可能有空间与您的标签混合。 尝试做一个search和replace,用几个空格replace所有的标签。

尝试这个:

 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 

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

你确定你没有在缩进空格中混合制表符和空格吗? (这将导致该错误。)

请注意,build议您不要在Python代码中使用制表符。 请参阅风格指南 。 您应该configurationNotepad ++为制表符插入空格。

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

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

1)全选,例如Ctrl + A

2)转到格式 – >解除区域

3)仔细检查你的缩进是否正确,保存并重新运行你的程序。

我正在使用Python 2.5.4

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

或者 – 你有混合的空格和制表符

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

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

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

如果您使用记事本++,请用扩展search模式进行“replace”以find\ t并用四个空格replace。

在primefaces

 Packages > Whitespace > Convert Spaces to Tabs 

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

 python -m tabnanny yourFile.py 

要么

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

如果你正在使用Vim,点击escape,然后input

GG = G

这自动缩进的一切,并会清除你所投入的任何空间。

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

为Atom用户, Packages ->whitspace -> remove trailing whitespaces这为我工作

只是一个补充。 Notepad ++中的这两个缩进都有类似的问题。

  1. 未收到的缩进
  2. 外部缩进级别

    进入—->search标签—->点击replace —->点击下方的单选button扩展 —>现在用四个空格replace\ t

    进入—->search标签—->点击replace —->点击下方的单选button扩展 —>现在用\ nreplace\ n

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

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

这是因为混合了标签和空格。 您可以删除所有的空格,并用制表符replace它们。

或者,试着写这个:

 #!/usr/bin/python -tt 

在代码的开头。 此行可解决制表符和空格之间的差异。

在我的情况下,问题是Eclipse上pydev的configuration

pydev @ Eclipse

如果您使用Komodo编辑器,您可以按照类似的错误消息中的build议进行操作:

1)全选,例如Ctrl + A

2)进入Code – > Untabify Region

3)仔细检查你的缩进是否正确,保存并重新运行你的程序。

我正在使用Python 3.4.2

如果你使用的是用于python开发的Sublime文本,你可以使用Anaconda包来避免这个错误。安装Anaconda之后,

  1. 打开你的文件崇高
  2. 右键点击空地
  3. select水蟒
  4. 点击autoformat
  5. 完成或按CTRL + ALT + R。

在pep8后build立你的编辑器后,你仍然有问题。 解决这个问题的好方法是用一个选项卡replace四个空格。 实际上python不支持4个空格代替1个选项卡。