2009-01-29 61 views
338

当我编译下面的Python代码,我得到IndentationError:取消缩进不匹配任何外部缩进级别

IndentationError: unindent does not match any outer indentation level


import sys 

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

为什么?

+27

如果您不会将'result = 0'更改为'result = 1',那么您的阶乘将不会是...好...准确:-) – Abgan 2009-01-29 16:45:09

+5

并且可能范围(1,n + 1)会更好,如果你想在你的计算中包含'n':-) – Abgan 2009-01-29 16:46:17

+0

我的$ 0.02,请尝试http://sourceforge.net/projects/spe。它是一个非常好的免费的,以python为中心的开发环境。它帮助我忘记了这个错误。 – Perpetualcoder 2009-01-29 17:39:44

回答

408

其他海报可能是正确的......可能有空间与您的标签混合。尝试做一个搜索&替换用一些空格替换所有标签。

尝试这种情况:

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) 
+1

是的,我必须真正地在最后两行的内部循环部分(仅在SO中)。不知道为什么...... – cbrulak 2009-01-29 16:40:30

+1

我的第一行,“结果= 0”(这应该是1,谢谢纠正)间隔,而其余的是标签,补,不知道蟒是那样 – cbrulak 2009-01-29 16:44:04

+0

是的,那可以很棘手。我使用emacs来编辑python,并且我已经将它设置为始终用py文件中的空格替换标签,所以我没有这个问题。 Notepad ++也可能有这样的选项。 – 2009-01-29 16:49:00

6

行:result = result * i应当缩进(它是for循环主体)。

或者 - 具有混合空间和制表符

28

你确定你是不是混合在你的缩进空白制表符和空格? (这会导致该错误。)

请注意,建议您不要在Python代码中使用制表符。请参阅style guide。您应该配置Notepad ++为制表符插入空格。

13

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

110

要轻松检查与选项卡/空格问题,你可以真正做到这一点:

python -m tabnanny yourfile.py 

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

3

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

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

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

-4

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

7

如果您使用Python的IDLE编辑器,你可以做,因为它表明类似的错误消息之一:

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

2)进入格式 - > Untabify地区

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

我使用Python 2.5.4

0

这可能是因为它上面的功能没有缩进以同样的方式。 即

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

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

或者, 尝试写这样的:

#!/usr/bin/python -tt 

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

0
在我的情况

,问题的PyDev的配置基于Eclipse

pydev @ Eclipse

3

如果你用记事本+ +,做一个“替换”以扩大检索模式下找到\吨,与四个空格代替。

153

重要空间是优选的方法 - 见PEP008 IndentationTabs or Spaces?。 (感谢@Siha这一点。)

对于Sublime Text用户:

设置Sublime Text使用制表符进行缩进: View - 在>Convert Indentation to Tabs

取消选中Indent Using Spaces选项,以及 - >Indentation上面的同一个子菜单。 这将立即解决此问题。

1

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

0

如果使用科莫多编辑器,你可以做,因为它表明类似的错误消息之一:

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

2)进入代码 - > Untabify地区

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

我使用Python 3.4.2

0

如果您正在使用Python开发崇高的文字,你可以通过使用包蟒蛇避免错误。安装蟒蛇,

  1. open your file in sublime
  2. right click on the open spaces
  3. choose anaconda
  4. click on autoformat
  5. DONE Or Press CTRL+ALT+R.
4

Atom

后去

Packages > Whitespace > Convert Spaces to Tabs 

然后再次检查文件缩进:

python -m tabnanny yourFile.py 

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

如果您正在使用的Vim,击中逃跑,然后键入

GG = G

这种自动缩进一切,将清理你扔。

2

Atom的用户的任何空间,Packages ->whitspace -> remove trailing whitespaces 这工作对我来说

1

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

  1. 相应稳固的压痕
  2. 外缩进级别

    转到---->搜索标签---->上自来水代替 ---->命中单选按钮扩展下面--->现在用四个空格替换\ t

    转到---->搜索标签---->点击替换 ---->点击单选按钮Extende下面d --->现在什么也没有

-2

替换\ n为偶数我也遇到了同样的问题,后来我发现,有一个编码问题。我建议ü太多改变乌尔编辑器。 最好的Python友好的IDE或编辑器是pycharm,sublime,vim for linux。

相关问题