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

Why?


当前回答

我得到这个错误,即使我没有任何制表符在我的代码,原因是有一个多余的右括号在我的代码的某处。我应该早点算出来的,因为它把等号前后的空格弄乱了……如果在IDE中运行Reformat code(或手动运行autopep8)后仍然发现任何错误,请确保所有括号都匹配,从第一个等号前后的奇怪空格开始。

其他回答

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

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

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

如果使用colab,则可以通过此命令避免错误。

< Ctrl-A > < Tab > < Shift-Tab >

它是所有的[制表符]缩进转换为[空格]缩进。然后点击OK。

如果你使用Python的IDLE编辑器,你可以按照它在类似错误消息中建议的那样做:

1)全选,如Ctrl + A

2)进入Format -> Untabify Region

3)再次检查缩进是否正确,保存并重新运行程序。

我使用的是Python 2.5.4

首先,只是提醒你有一个逻辑错误,你最好保持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 shell FOR语句已经结束。如果你有使用python shell的经验,那么你就能理解为什么我们必须留下一行。

只是一个补充。我在notepad++中有一个类似的缩进问题。

Unexcepted缩进 外压痕水平 去---->搜索选项卡---->点击替换---->点击单选按钮扩展下面->现在用四个空格替换\t 去---->搜索选项卡---->点击替换---->点击单选按钮扩展下面->现在替换\n与无