如何处理“意外缩进”在Python中?

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

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

意外的缩进。 这行代码在开始的时候比以前的有更多的空间,但是之前的那个不是子块的开始(例如if / while / for语句)。 块中的所有代码行必须以完全相同的空白string开头。 例如:

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

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

 >>> print "hello" IndentationError: unexpected indent 

Unindent不匹配任何外部缩进级别。 这行代码在开始的时候比以前的空间less,但同样也不会匹配任何其他的可能的部分。 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 

允许混合选项卡和空格(至less在我的Python版本上),但是Python假设选项卡长度为8个字符,可能与您的编辑器不匹配。 只要对选项卡说“不”。 大多数编辑器允许它们被空格自动replace。

避免这些问题的最好办法是在缩进子块时始终使用一致的空格,最好使用一个好的IDE来为您解决问题。 这也将使您的代码更具可读性。

在Python中,间距非常重要,这就给出了你的代码块的结构。 当你弄糟你的代码结构时会发生这样的错误,例如:

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

您的文件中也可能包含多个制表符和空格。

我build议你使用PyScripter或Netbeans这样的Python语法感知编辑器

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

打开你正在使用的任何编辑器中的可见空白,并打开空格replace标签。

虽然您可以使用Python混合选项卡和空间的标签通常会导致您遇到的错误。 用4个空格replace标签是编写Python代码的推荐方法。

通过使用正确的缩进。 Python是空白的意识,所以你需要按照它的缩进指示块,否则你会得到缩进错误。

确保在编辑器中使用“插入空格而不是制表符”选项。 然后你可以select你想要的标签宽度,例如4.你可以在编辑 – >首选项 – >编辑器中的gedit中find这些选项。

底线:USE SPACES不是标签

当把某些东西粘贴到Python解释器(terminal/控制台)时,也会发生这个错误。

请注意,解释器将空行解释为expression式的结尾,所以如果粘贴类似的东西

 def my_function(): x = 3 y = 7 

解释器会将y = 7之前的空行解释为expression式的结尾,也就是说您已经完成了对函数的定义,而下一行( y = 7将会有不正确的缩进,因为它是一个新的expression式。

有一个技巧,总是为我工作:

如果你有意想不到的缩进,并且你看到所有的代码都是完全缩进的,可以尝试用另一个编辑器打开它,你会看到哪行代码没有缩进。

使用vim,gedit或者像这样的编辑器时发生在我身上。

尝试只使用一个编辑器为您的代码。

只需复制你的脚本,并放在“”“你的整个代码”“”…

在一个variables中指定这一行..就像,

 a = """ your python script """ print a.replace('here please press tab button it will insert some space"," here simply press space bar four times") # here we replacing tab space by four char space as per pep 8 style guide.. 

现在执行这个代码,在Sublime Editor中使用ctrl + b,现在它将在控制台中打印缩进的代码。 而已

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

查看 – >缩进 – >将缩进转换为空格

我所描述的问题是由Sublime文本编辑器引起的。 其他编辑也可能导致同样的问题。 从本质上讲,这个问题与Python想要根据空间来对待缩进,而不同的编辑器则是通过制表符来对缩进进行编码。

如果缩进看起来不错,那么看看你的编辑器是否有“查看空白”选项。 启用这应该允许find空间和制表符混合在哪里。

记事本+ +是正确的标签空间,但缩进问题终于在Sublime文本编辑器中find。

使用Sublime文本编辑器并逐行进行