Python 使用行开头的空格来确定代码块的开始和结束时间。您可能遇到的错误有:
意外的缩进。这行代码的开头比前一行有更多的空格,但前一行不是子块的开头(例如,if, while, and for声明)。块中的所有代码行必须以完全相同的空格字符串开头。例如:
>>> def a():
... print "foo"
... print "bar"
IndentationError: unexpected indent
这种情况在交互式运行 Python 时尤其常见:确保命令前没有添加任何额外的空格。 (复制粘贴示例代码时非常烦人!)
>>> print "hello"
IndentationError: unexpected indent
取消缩进不匹配任何外部缩进级别。这行代码的开头空格比前一行少,但同样它不匹配它可能属于的任何其他块。 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。这也将使您的代码更具可读性。