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

106 python syntax-error

如何纠正python中的"意外缩进"错误?

Ali*_*ell 127

Python在行的开头使用间距来确定代码块何时开始和结束.你可以得到的错误是:

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

>>> def a():
...   print "foo"
...     print "bar"
IndentationError: unexpected indent
Run Code Online (Sandbox Code Playgroud)

这个在交互式运行python时尤为常见:确保在命令之前不要添加任何额外的空格.(复制和粘贴示例代码时非常烦人!)

>>>   print "hello"
IndentationError: unexpected indent
Run Code Online (Sandbox Code Playgroud)

Unindent与任何外部缩进级别都不匹配.这行代码在开始时的空间比之前的空间少,但同样地,它与它可能属于的任何其他块不匹配.Python无法决定它的去向.例如,在下面,最终的打印是否应该是if子句的一部分?

>>> if user == "Joey":
...     print "Super secret powers enabled!"
...   print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level
Run Code Online (Sandbox Code Playgroud)

期望一个缩进的块.这行代码在开始时具有与前一行相同的空格数,但最后一行预计会启动一个块(例如if/while/for语句,函数定义).

>>> def foo():
... print "Bar"
IndentationError: expected an indented block
Run Code Online (Sandbox Code Playgroud)

如果您想要一个不执行任何操作的函数,请使用"no-op"命令传递:

>>> def foo():
...     pass
Run Code Online (Sandbox Code Playgroud)

允许混合制表符和空格(至少在我的Python版本中),但Python假定制表符长8个字符,可能与您的编辑器不匹配.只是对标签说"不".大多数编辑器允许它们被空格自动替换.

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

  • 很好的解释.除此之外,当他在NotePad ++中将空格与'tab'和'space bar'混合时,我也花了缩进意外错误,将'tabs'替换为'spaces'并修复. (7认同)
  • @JoséRosasSáenz你的评论给我带来了太多麻烦 (2认同)

yan*_*ost 21

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

def test_function() :
   if 5 > 3 :
   print "hello"
Run Code Online (Sandbox Code Playgroud)

您的文件中也可能混合使用制表符和空格.

我建议你使用python语法识别编辑器,如PyScripterNetbeans

  • 混合选项卡和空格引发"SyntaxError:在缩进中不一致地使用制表符和空格" (2认同)

Man*_*j I 18

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

  • Python 解释器的实现是什么?什么版本?您可以添加对(官方)文档的引用吗?(但是***没有***“编辑:”、“更新:”或类似内容 - 问题/答案应该看起来像今天写的一样。) (3认同)

Jam*_*hon 15

在您使用的任何编辑器中打开可见空白,并打开替换选项卡和空格.

虽然您可以使用带有Python混合选项卡和空格的选项卡,但通常会导致您遇到的错误.使用4个空格替换选项卡是编写Python代码的推荐方法.


wor*_*ad3 8

通过使用正确的缩进.Python是空白感知的,所以你需要遵循其缩进guidlines的块,否则你会得到缩进错误.


Pun*_*mba 6

如果您使用Sublime编写Python并获得缩进错误,

view - > indentation - >将缩进转换为空格

我所描述的问题是由Sublime文本编辑器引起的.同样的问题也可能由其他编辑引起.从本质上讲,问题与Python有关,希望根据空格处理缩进,而不是根据制表符编码缩进的各种编辑器.


小智 5

确保在编辑器中使用“插入空格而不是制表符”选项。然后你可以选择你想要的制表符宽度,例如 4。你可以在gedit 的菜单Edit \xe2\x86\x92 preferences \xe2\x86\x92 Editor下找到这些选项。

\n

底线:使用空格,而不是制表符

\n


小智 5

似乎没有提到的一个问题是,由于与缩进无关的代码问题,可能会出现此错误。

例如,采用以下脚本:

def add_one(x):
    try:
        return x + 1
add_one(5)
Run Code Online (Sandbox Code Playgroud)

IndentationError: unexpected unindent当问题当然是缺少语句时,这会返回一个except:

我的观点:检查上面报告意外(未)缩进的代码!


小智 5

运行以下命令来解决它:

autopep8 -i <filename>.py
Run Code Online (Sandbox Code Playgroud)

这将更新您的代码并解决所有缩进错误:)

希望这会解决