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


当前回答

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

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

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

其他回答

例如:

1. def convert_distance(miles):
2.   km = miles * 1.6
3.   return km

在这段代码中,我遇到了同样的情况。只需要删除之前的缩进空格 第2行和第3行,然后使用制表符或空格。不要两者都用。在python中编写代码时,给予适当的缩进。 对于Spyder去源代码>修复缩进。同样适用于VC代码和sublime文本或任何其他编辑器。固定缩进。

首先,只是提醒你有一个逻辑错误,你最好保持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的经验,那么你就能理解为什么我们必须留下一行。

重要的是: 空格是首选方法-请参阅PEP 8缩进和制表符或空格?(感谢@Siha。)

Sublime Text用户:

设置Sublime Text使用制表符缩进: 将缩进转换为制表符

在上面的同一子菜单中取消使用空格缩进选项。 这将立即解决这个问题。

为了它的价值,我的文档字符串缩进太多,这也抛出相同的错误

class junk: 
     """docstring is indented too much""" 
    def fun(): return   

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

print Factorial(10)