我该如何处理 Python 中的“意外缩进”?[重复]

2025-02-10 08:56:00
admin
原创
59
摘要:问题描述:如何纠正 Python 中的“意外缩进”错误?解决方案 1:Python 使用行首的空格来确定代码块的开始和结束时间。您可能会遇到以下错误:意外缩进。此行代码开头的空格比前一行多,但前一行不是子块(例如 if 、 while和for语句)的开头。块中的所有代码行都必须以完全相同的空格字符串开头。例如...

问题描述:

如何纠正 Python 中的“意外缩进”错误?


解决方案 1:

Python 使用行首的空格来确定代码块的开始和结束时间。您可能会遇到以下错误:

意外缩进。此行代码开头的空格比前一行多,但前一行不是子块(例如 if whilefor语句)的开头。块中的所有代码行都必须以完全相同的空格字符串开头。例如:

>>> def a():
...   print "foo"
...     print "bar"
IndentationError: unexpected indent

这个问题在以交互方式运行 Python 时尤其常见:确保命令前没有多余的空格。(复制粘贴示例代码时非常烦人!)

>>>   print "hello"
IndentationError: unexpected indent

Unindent 不匹配任何外部缩进级别。此行代码开头的空格比前一行少,但同样不匹配它所属的任何其他块。Python 无法决定它去哪里。例如,在下面的代码中,最后的 print 是否应该是 if 子句的一部分?

>>> if user == "Joey":
...     print "Super secret powers enabled!"
...   print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level

应为缩进的块。此行代码开头的空格数与前一行相同,但最后一行应为块的开头(例如ifwhilefor语句或函数定义)。

>>> def foo():
... print "Bar"
IndentationError: expected an indented block

如果您想要一个不执行任何操作的函数,请使用“no-op”命令pass

>>> def foo():
...     pass

允许混合使用制表符和空格(至少在我的 Python 版本中是这样的),但 Python 假设制表符长度为 8 个字符,这可能与您的编辑器不匹配。不要混合使用制表符和空格。大多数编辑器允许自动将一个替换为另一个。如果您在团队中,或者在开发开源项目,请查看他们更喜欢哪种。

避免这些问题的最佳方法是在缩进子块时始终使用一致的空格数,最好使用能够为您解决问题的优秀 IDE。这也会让您的代码更具可读性。

解决方案 2:

在 Python 中,间距非常重要。这决定了代码块的结构。

当你弄乱了代码结构时就会发生此错误,例如像这样:

def test_function():
   if 5 > 3:
   print "hello"

您的文件中也可能混合有制表符和空格。

我建议您使用支持 Python 语法的编辑器,例如PyScripter或NetBeans。

解决方案 3:

使用-tt选项运行您的代码,以查明是否不一致地使用制表符和空格。

解决方案 4:

在您使用的任何编辑器中打开可见空白,并打开用空格替换制表符

虽然您可以在 Python 中使用制表符,但混合使用制表符和空格通常会导致您遇到的错误。用四个空格替换制表符是编写 Python 代码的推荐方法。

解决方案 5:

通过使用正确的缩进。Python 可以识别空格,因此您需要遵循其块的缩进指南,否则会出现缩进错误。

解决方案 6:

运行以下命令即可解决:

autopep8 -i <filename>.py

这将更新您的代码并解决所有缩进错误:)

解决方案 7:

如果你使用Sublime Text编写 Python并遇到缩进错误,

菜单视图缩进将缩进转换为空格

我所描述的问题是由 Sublime Text 编辑器引起的。其他编辑器也可能导致同样的问题。本质上,这个问题与 Python 希望以空格的形式处理缩进有关,而各种编辑器则以制表符的形式对缩进进行编码。

解决方案 8:

似乎没有提到的一个问题是,这个错误可能由于与缩进无关的代码问题而出现。

例如,采用以下脚本:

def add_one(x):
    try:
        return x + 1
add_one(5)

IndentationError: unexpected unindent当问题当然是缺少语句时,这将返回一个except:

我的观点是:检查上面的代码,其中报告了意外的(取消)缩进!

解决方案 9:

确保在编辑器中使用“插入空格而不是制表符”选项。然后您可以选择所需的制表符宽度,例如 4。您可以在gedit 的菜单“编辑首选项编辑器”下找到这些选项。

底线:使用空格,而不是制表符

解决方案 10:

将某些内容粘贴到 Python 解释器(终端/控制台)时也会发生此错误。

请注意,解释器将空行解释为表达式的结尾,因此如果你粘贴类似

def my_function():
    x = 3

    y = 7

解释器将把之前的空行解释y = 7为表达式的结束,即您已完成函数的定义,而下一行 -y = 7将具有不正确的缩进,因为它是一个新的表达式。

解决方案 11:

这取决于具体情况。另一个尚未涉及的场景如下。假设你有一个文件,其中包含一个包含特定方法的类

class Scraper:
    def __init__(self):
        pass

    def scrape_html(self, html: str):
        pass

在文件底部有类似这样的内容

if __name__ == "__main__":
    # some
    # commands
    # doing
    # stuff

使整个文件看起来像这样

class Scraper:
    def __init__(self):
        pass

    def scrape_html(self, html: str):
        pass

if __name__ == "__main__":
    # some
    # commands
    # doing
    # stuff

例如,如果在 scrape_html() 中打开一个 if/else 语句

class Scraper:
    def __init__(self):
        pass

    def scrape_html(self, html: str):
        if condition:
            pass
        else:

if __name__ == "__main__":
    parser = argparse.ArgumentParser()

你需要pass在 else 语句中添加或任何你想要的内容,否则你会得到

预期缩进块

在此处输入图片描述

未预期取消缩进

在此处输入图片描述

预期表达

在此处输入图片描述

第一行

意外的缩进

在此处输入图片描述

添加此项pass即可解决所有这四个问题。

解决方案 12:

如果缩进看起来没问题,那么看看你的编辑器是否有“查看空白”选项。启用此选项应该可以找到空格和制表符混合的位置。

解决方案 13:

有一个技巧对我来说总是有效的:

如果您遇到了意外的缩进,并且发现所有代码都完美缩进,请尝试使用另一个编辑器打开它,您将看到哪行代码没有缩进。

当我使用Vim、gedit或类似的编辑器时,就会发生这种情况。

尝试仅使用一个编辑器来编写您的代码。

解决方案 14:

只需复制您的脚本,并将其放在“您的整个代码”下...

在变量中指定此行...例如,

a = """ your Python script """

print a.replace("Here please press the tab button. It will insert some space", " here simply press the space bar four times.")
#
# Here we are replacing tab space by four character
# space as per the PEP 8 style guide...
#
# Now execute this code. In the Sublime Text
# editor use Ctrl + B. Now it will print
# indented code in the console. That's it.

解决方案 15:

您需要做的就是从以下代码的开头删除空格或制表符空格:

from django.contrib import admin

# Register your models here.
from .models import Myapp
admin.site.register(Myapp)

解决方案 16:

Notepad++给出了正确的制表符空间,但最终在Sublime Text编辑器中发现了缩进问题。

使用 Sublime Text 编辑器逐行执行。

解决方案 17:

与许多其他编程语言不同,Python 中的缩进很重要,这不仅仅是为了代码的可读性。

如果代码中连续命令之间有任何空格或制表符,Python 会给出此错误,因为 Python 对此很敏感。当我们将代码复制并粘贴到任何 Python 中时,我们很可能会遇到此错误。

确保使用文本编辑器(例如Notepad++)识别并删除这些空格,或者手动删除出现错误的代码行中的空格。

# Step 1: Gives an error
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])

# Step 2: L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]print(L[2: ])

# Step 3: No error after space was removed
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
# Output: [[7, 8, 9, 10]]

解决方案 18:

这取决于上下文,但缩进错误通常是由于使用制表符而不是空格引起的。

您可以采取以下步骤来纠正此问题:

  1. 复制导致错误的制表符或空格

  2. 在您的 IDE 中执行查找和替换(通常是Ctrl+ H)。

  3. 将复制的制表符或空格粘贴到“查找”搜索栏中,然后将其全部替换为四个空格(假设您的 IDE 使用四个空格作为“良好”的缩进)

如果您将代码从外部源复制并粘贴到 IDE 中,也会经常发生此错误,因为其他地方的格式可能与 IDE 对“良好”缩进的定义不匹配。

解决方案 19:

检查你的括号 我出现此错误是因为我忘记关闭一个括号

print("some text"
pandas.do_something()
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1579  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1355  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   8  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   9  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用