如何处理python中的“意外缩进”?

2024-04-25 08:42:52 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

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

意外缩进。这行代码在开始处的空格比之前的多,但之前的空格不是子块的开始(例如if/while/for语句)。块中的所有代码行必须以完全相同的空白字符串开头。例如:

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

当以交互方式运行python时,这一点尤其常见:确保在命令之前没有放置任何额外的空格。(复制和粘贴示例代码时非常烦人!)

>>>   print "hello"
IndentationError: unexpected indent

unident与任何外部缩进级别都不匹配。这行代码在开始处的空格比之前的少,但与它可能属于的任何其他块都不匹配。Python无法决定它的去向。例如,在下面,是否应该将最终打印内容作为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为您解决问题。这也将使您的代码更具可读性。

在Python中,间隔非常重要,这给出了代码块的结构。 当您弄乱代码结构时会发生此错误,例如:

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

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

我建议您使用python语法感知编辑器,比如PyScripter,或者Netbeans

使用-tt选项运行代码,以确定是否不一致地使用了制表符和空格

相关问题 更多 >