【问题标题】:Indentation Error in Python [duplicate]Python中的缩进错误[重复]
【发布时间】:2013-02-05 10:00:50
【问题描述】:

由于代码中有这部分,我无法编译:

if command == 'HOWMANY':
    opcodegroupr = "A0"
    opcoder = "85"
elif command == 'IDENTIFY':
    opcodegroupr = "A0"
    opcoder = "81"

我有这个错误:

Sorry: IndentationError: ('unndent does not match any external indentation level', ('wsn.py', 1016, 30, "\t\telif command == 'IDENTIFY':\n"))

但我没有看到任何缩进错误。可能是什么问题?

【问题讨论】:

  • 检查是否混合了制表符和空格
  • 另外,在您的编辑器中打开显示空白。它对 Python 等可识别空格的语言有很大帮助。

标签: python compiler-errors indentation


【解决方案1】:

您正在混合制表符和空格。

使用以下命令查找确切位置:

python -tt yourscript.py

并用空格替换所有标签。您确实希望将文本编辑器也配置为只为制表符插入空格。

【讨论】:

  • 或者反过来……(取决于你的个人喜好)
  • @MartijnPieters 如果你使用标签,你就有标签,所以你不需要关心它的视觉呈现。您不应该混合使用制表符和空格,但除此之外,只需选择一个并坚持使用它。你是对的,这是一场永无止境的辩论;这完全取决于你的个人喜好——因此我的评论。
  • 我一直不明白为什么要使用空格而不是制表符 - 1 个制表符是 1 级缩进,然后它的大小是显示首选项 - 但似乎世界不同意我的观点。
  • @poke:这很好,但是在任何规模不错的项目中,您都不会是唯一的开发人员。一旦你有两个人在一起,你很有可能会不同意标签的大小。坦率地说,假装没有人会犯混合制表符和空格的错误是把你的头埋在沙子里。 OSS(python 或其他)的每个主要样式指南都声明您需要使用空格,这是有原因的。 :-)
  • 应该有一种,最好只有一种显而易见的方法。遵循python代码库本身的风格是显而易见的。
【解决方案2】:

如有疑问,请更改您的编辑器以使制表符和空格可见。让编辑器将所有制表符解析为 4 个空格也是一个非常好的主意。

【讨论】:

  • 我可以使用什么编辑器?
  • 我的编辑器是 CentOs 6 下的 geany
  • @sharkbait 在其首选项中,选择“编辑器”/“显示”并启用“显示空白”。然后制表符和空格将显示为一些(不同的)字符。如果有问题的行有不同的字符作为缩进,那么你必须修复这些。 (Source)
  • 太棒了!!!!非常感谢!!!
【解决方案3】:

Sublime 文本编辑器

缩进错误通常发生在代码包含用于缩进的制表符和空格的混合时。我有一个非常好的解决方案来纠正它,只需在 sublime 文本编辑器中打开您的代码,然后在 Sublime 文本编辑器的右下角找到 'Tab Size' 并单击它。现在选择任一

'Convert Indentation to Spaces'

'Convert Indentation to Tabs'

您的代码在任何一种情况下都可以工作。

此外,如果您希望 Sublime 文本自动为您执行每个代码,您可以更新首选项设置,如下所示:-

Sublime Text 菜单 > 首选项 > 设置 - 特定语法:

Python.sublime-settings

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true
}

【讨论】:

    【解决方案4】:

    在记事本++中

    View --->Show Symbols --->Show White Spaces and Tabs(select)

    用空格替换所有制表符。

    【讨论】:

      【解决方案5】:

      这也发生在我身上,但我解决了问题。我使用的是 5 个空格的缩进,但是当我按下制表符时,它曾经放置了 4 个空格的缩进。所以我认为你应该只使用一件事;即标签按钮添加缩进或空格。理想的缩进是 4 个空格之一。我发现 IntelliJ 对于这类事情非常有用。

      【讨论】:

        【解决方案6】:

        您是否使用了一些 <tab> 而不是空格?

        尝试删除代码前的所有空格并使用<space> 字符读取它们,以确保它不是<tab>

        【讨论】:

          【解决方案7】:

          这也发生在我身上,python 对空间敏感, 所以在“ : ”(冒号)之后 你可能已经留下了一个空间,
          例如: [空格由“.”表示]

          `if command == 'HOWMANY':.
               opcodegroupr = "A0"
               opcoder = "85"
           elif command == 'IDENTIFY':.
               opcodegroupr = "A0"
               opcoder = "81"`
          

          因此请尝试删除不必要的空格,如果您在 IDE 中打开它,您的光标将显示在“:”之外,例如:-“if command == 'HOWMANY': |
          ....而应该是:- "if command == 'HOWMANY':| "

          【讨论】:

          • 当你在tab中转换它时,文本编辑器会删除“:”之后的空格
          • 嗯...不知道你从哪里得到答案...你想回顾一下 Python 如何处理空格...尾随空格不会导致缩进错误。
          猜你喜欢
          • 2014-08-12
          • 1970-01-01
          • 2011-05-14
          • 1970-01-01
          • 2020-12-17
          • 1970-01-01
          • 2012-10-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多