我应该如何处理 Python 中的“意外缩进”?

新手上路,请多包涵

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

原文由 moni 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 914
1 个回答

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

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

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

这在交互式运行 Python 时特别常见:确保您没有在命令前放置任何额外的空格。 (复制和粘贴示例代码时非常烦人!)

 >>>   print "hello"
IndentationError: unexpected indent

Unindent 不匹配任何外部缩进级别。 这行代码的开头空格比之前少,但同样它不匹配它可能属于的任何其他块。 Python 无法决定它的去向。例如,在下面,最终打印是否应该是 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”命令 _传递_:

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

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

避免这些问题的最佳方法是在缩进子块时始终使用一致数量的空格,并且理想情况下使用可以为您解决问题的良好 IDE。这也将使您的代码更具可读性。

原文由 Alice Purcell 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏