没有缩进的Python def

时间:2014-12-09 21:48:27

标签: python

在我拥有的源文件中,有多次出现以下格式(请注意def行后没有缩进):

def sendSystemParms2(self, destAddress, subid, state):

raw = sysparms_format2.build(Container(
length = 0x0D,
command = MT_APP_MSG_CMD0))

def method2(parm2):
print parm2

它正在工作和运行。我很迷惑。任何提示? 我不能上传图片,因为它是新的,没有足够的声誉,但我可以出示证明。

1 个答案:

答案 0 :(得分:9)

你有一个使用标签和空格混合的文件。

Python将标签扩展为八个空格,但您正在使用tabstop大小四个空格的编辑器中查看该文件。

函数体使用制表符进行缩进,但def行使用4个空格代替。就像Python一样,方法体正确缩进。

如果我将文本编辑器设置为使用大小为8个空格的选项卡,然后选择要让编辑器突出显示选项卡的文本,我会看到:

source code with indentation highlighted

线条表示标签。

这是您不应该使用标签进行缩进的所有的原因之一。 Python style guide建议您仅使用空格进行缩进。在Python 3中,像这样混合制表符和空格是语法错误。

通过使用-tt command line switch运行Python,您可以告诉Python 2为这种标签和空格组合引发TabError

  

-t
  当源文件混合制表符和空格以进行缩进时,发出警告,使其依赖于以空格表示的制表符的价值。选项被给出两次后发出错误( -tt )。