缩进错误:未对齐缩进与任何外部缩进级别匹配,尽管缩进看起来正确。

793
当我编译下面的Python代码时,我得到以下错误:

IndentationError: unindent does not match any outer indentation level


import sys

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

为什么?

12
我遇到了同样的错误,但是我碰巧将一个方法在代码中向左缩进了一些,这导致在它下面的下一个方法中出现了这个错误。因此,这个错误不仅可能是由于混合使用制表符和空格造成的。 - Prof. Falken
27
我正在使用Sublime Text 3。我有一个Django项目。我使用“View > Indentation > Intent Using Spaces”修复了错误。 - abhimanyuaryan
3
我发现使用IDLE可以更轻松地找到缩进问题。它能清晰地找出大多数编辑器无法发现的缩进错误。 - Dennis Gathagu
2
Sublime 3.2.2:查看 > 缩进 > 将缩进转换为空格 -- 对我有用 - Impermanence
2
您可以通过查看 Markdown 源代码 看到问题所在: 最后三行前面有制表符。但 Stack Overflow 在呈现时会将制表符转换为 4 个空格,因此该问题就消失了。 - wjandrea
显示剩余2条评论
32个回答

10

Atom 上,

前往

Packages > Whitespace > Convert Spaces to Tabs

接着再次检查您的文件缩进:

python -m tabnanny yourFile.py
或者
>python
>>> help("yourFile.py")

9
如果您使用的是notepad++,请在扩展搜索模式下进行“替换”,找到\t并将其替换为四个空格。

9

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

  1. < Ctrl-A >
  2. < Tab >
  3. < Shift-Tab >

这将把所有的 [tab] 缩进转换为 [space] 缩进。然后点击 OK。


8

似乎是一个缩进问题。在Python中,您不必匹配花括号,但必须匹配缩进级别。

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

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


6

我在Ubuntu操作系统中使用Sublime text。要解决这个问题,请执行以下步骤:

视图 -> 缩进 -> 将缩进转换为制表符


6

就我所知,我的文档字符串缩进太多,也会导致同样的错误。

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

缩进错误:取消缩进与任何外部缩进级别不匹配。

这解决了我的问题。 - bhordupur

4

我使用 Jupyter Notebook 并尝试了以上几种解决方案(根据我的情况进行了适当调整),但都没有效果。然后,我逐行检查,删除了每行的所有空格并用制表符替换。这解决了问题。


4

补充一下。我在Notepad++中也遇到了类似的问题,都是关于缩进的。

  1. 意外的缩进
  2. 外部缩进级别

    转到 ----> 搜索选项卡 ----> 点击替换 ----> 选择下方的扩展单选按钮 ---> 现在用四个空格替换\t

    转到 ----> 搜索选项卡 ----> 点击替换 ----> 选择下方的扩展单选按钮 ---> 现在将\n替换为空


3
这可能是因为上面的函数缩进方式不同。例如:
class a:
    def blah:
      print("Hello world")
    def blah1:
      print("Hello world")

2

我正在使用Sublime Text 3编辑Flask项目。在取消选中“Indent Using Spaces”后,通过选择View > Indentation > Tab Width: 4,我解决了错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接