我该如何处理 Python 中的“意外缩进”?[重复]
- 2025-02-10 08:56:00
- admin 原创
- 59
问题描述:
如何纠正 Python 中的“意外缩进”错误?
解决方案 1:
Python 使用行首的空格来确定代码块的开始和结束时间。您可能会遇到以下错误:
意外缩进。此行代码开头的空格比前一行多,但前一行不是子块(例如 if 、 while和for语句)的开头。块中的所有代码行都必须以完全相同的空格字符串开头。例如:
>>> 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
应为缩进的块。此行代码开头的空格数与前一行相同,但最后一行应为块的开头(例如if、while、for语句或函数定义)。
>>> 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:
这取决于上下文,但缩进错误通常是由于使用制表符而不是空格引起的。
您可以采取以下步骤来纠正此问题:
复制导致错误的制表符或空格
在您的 IDE 中执行查找和替换(通常是
Ctrl
+H
)。将复制的制表符或空格粘贴到“查找”搜索栏中,然后将其全部替换为四个空格(假设您的 IDE 使用四个空格作为“良好”的缩进)
如果您将代码从外部源复制并粘贴到 IDE 中,也会经常发生此错误,因为其他地方的格式可能与 IDE 对“良好”缩进的定义不匹配。
解决方案 19:
检查你的括号 我出现此错误是因为我忘记关闭一个括号
print("some text"
pandas.do_something()