IndentationError: unindent 与任何外部缩进级别都不匹配,尽管缩进看起来正确[重复]

2024-12-09 08:30:00
admin
原创
148
摘要:问题描述:当我编译下面的 Python 代码时,我得到IndentationError:unindent 与任何外部缩进级别都不匹配import sys def Factorial(n): # Return factorial result = 1 for i in range (1,n):...

问题描述:

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

为什么?


解决方案 1:

导致此错误的一个可能原因是缩进时空格和制表符混在一起。请尝试执行搜索和替换,将所有制表符替换为几个空格。

尝试一下:

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)

解决方案 2:

重要的

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

对于Sublime Text用户:

设置 Sublime Text 使用制表符进行缩进:菜单视图缩进将缩进转换为制表符

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

解决方案 3:

为了轻松检查制表符/空格的问题,您实际上可以这样做:

python -m tabnanny yourfile.py

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

解决方案 4:

您确定在缩进空白处没有混合制表符和空格吗?(否则会导致错误。)

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

解决方案 5:

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

解决方案 6:

如果你正在使用 Vim,请按 Esc,然后输入

gg=G

这会自动缩进所有内容并清除您输入的任何空格。

解决方案 7:

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

1)全选,例如Ctrl+A

2)转到格式->取消制表符区域

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

我正在使用 Python 2.5.4

解决方案 8:

使用Visual Studio Code

如果您使用的是 Visual Studio Code,那么它将使用以下简单步骤将所有混合缩进转换为空格或制表符。

  1. Ctrl+ Shift+P

  2. 使用空格缩进类型

  3. Enter

解决方案 9:

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

或者 - 您混合了空格和制表符

解决方案 10:

对于Spyder用户,请访问

菜单来源修复缩进

立即修复该问题。

解决方案 11:

在Atom上

前往

Packages > Whitespace > Convert Spaces to Tabs

然后再次检查文件缩进:

python -m tabnanny yourFile.py

或者

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

解决方案 12:

如果您使用Notepad++,请使用扩展搜索模式执行“替换”以查找 \t 并替换为四个空格。

解决方案 13:

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

  1. Ctrl+A

  2. Tab

  3. Shift+Tab

都是将 [tab] 缩进转换为 [space] 缩进。然后OK

解决方案 14:

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

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

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

解决方案 15:

不管怎样,我的文档字符串缩进太多了,这也会引发同样的错误

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

IndentationError: unindent does not match any outer indentation level

解决方案 16:

我在Ubuntu操作系统中使用Sublime Text。要解决此问题,请转到:

菜单视图缩进将缩进转换为制表符

解决方案 17:

只是补充一下。我在 Notepad++ 中遇到了类似的缩进问题。

  1. 异常压痕

  2. 外部缩进级别

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

转到 ----> 搜索选项卡 ----> 点击替换----> 点击下面的扩展单选按钮---> 现在用空值替换 \n

解决方案 18:

我使用的是Jupyter Notebook,尝试了之前答案中的几乎所有解决方案(适应我的场景),但都无济于事。然后我逐行检查,删除每行的所有空格并替换为制表符。这解决了问题。

解决方案 19:

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

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

解决方案 20:

由于我意识到没有针对Spyder 的具体答案,因此我将添加一个:

基本上,仔细查看您的if语句并确保所有ifs、elifs 和elses 具有相同的间距,也就是说,它们在开头位于同一行,如下所示:

def your_choice(answer):
    if answer>5:
        print("You're overaged")
    elif answer<=5 and answer>1:
            print("Welcome to the toddler's club!")
    else:
            print("No worries, mate!")

解决方案 21:

例如:

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

在这段代码中,我也遇到了同样的情况。只需删除第 2 行和第 3 行之前的缩进空格,然后使用制表符或空格即可。切勿同时使用两者。在用 Python 编写代码时,请提供适当的缩进。

对于Spyder,转到菜单SourceFix Indentation 。对于Visual Studio Code、Sublime Text或任何其他编辑器也是如此。修复缩进。

解决方案 22:

我在Flask项目中使用Sublime Text 3。在取消选择使用空格缩进后,我使用菜单视图缩进Tab Width : 4修复了错误。

解决方案 23:

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

解决方案 24:

纠正缩进错误的另一种方法是将代码复制到 PyCharm(如果您已经配置好了)并重新格式化文件,它将自动正确缩进。

解决方案 25:

这是因为制表符和空格混用了。您可以删除所有空格并将其替换为制表符。

或者,尝试这样写:

#!/usr/bin/python -tt

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

解决方案 26:

对于Atom用户,软件包空格删除尾随空格。这对我有用。

解决方案 27:

我定义了一个函数,但是除了函数注释之外它没有任何内容......

def foo(bar):
    # Some awesome temporary comment.
    # But there is actually nothing in the function!
    # D'Oh!

它喊道:

  File "foobar.py", line 69

                                ^
IndentationError: expected an indented block

^(注意标记指向的那一行是空的)

--

多种解决方案:

1:只需注释掉该函数

2:添加函数注释

def foo(bar):
    '' Some awesome comment. This comment could be just one space.''

3:添加一行不做任何事

def foo(bar):
    0

无论如何,一定要清楚地说明 为什么它是一个空函数——对于您自己,或者对于将使用您的代码的同事来说。

解决方案 28:

尽管我的代码中没有任何制表符,但我还是遇到了此错误,原因是我的代码中某处有一个多余的右括号。我应该早点解决这个问题,因为它弄乱了一些等号前后的空格……

如果即使在 IDE 中运行重新格式化代码(或手动运行 autopep8)后仍发现任何异常,请确保所有括号都匹配,从第一个等号之前/之后的奇怪空格向后开始。

解决方案 29:

我得到了以下类似的错误:

IndentationError:预期一个缩进的块

当我忘记放入pass下面的类或函数时,其他代码就在类或函数后面写入,如下所示:

class Person:
    # pass

x = 10
def test():
    # pass

x = 10

并且,当类或函数之后没有写入其他代码时,如下所示:

class Person:
    # pass

# x = 10
def test():
    # pass

# x = 10

我收到以下错误:

SyntaxError:解析时出现意外的 EOF

解决方案 30:

我昨天也遇到了同样的问题。这是一个缩进错误。我当时使用的是Sublime Text编辑器。

我花了好几个小时试图修复它,最后我把代码复制到了vi文本编辑器中。它工作得很好。

PS:Python 对空格过于敏感。请确保不要混淆空格和制表符。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用