没有缩进的Python def

dou*_*leE 2 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
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 9

您有一个使用标签和空格混合的文件.

Python将选项卡扩展为八个空格,但您在编辑器中查看该文件,该编辑器使用四个空格的tabstop .

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

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

source code with indentation highlighted

线条表示标签.

这是你不应该使用选项卡缩进来的原因之一可言.在Python的风格指南建议您只使用空格缩进.在Python 3中,像这样混合制表符和空格是语法错误.

TabError通过使用-tt命令行开关运行Python,您可以告诉Python 2 为这种选项卡和空格组合提出:

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

  • 如果你将`-tt`传递给解释器,它在Python 2中也是非法的.在大多数情况下,这可能是一个好主意. (2认同)
  • 公平地讲,此特定错误实际上并不意味着您应该在制表符上使用空格,反之亦然,仅意味着您需要保持一致。(我用空格...) (2认同)