Python代码中的奇怪缩进

时间:2013-12-17 13:44:58

标签: python indentation

我收到了一些要维护的Python代码。只有当我修改内部for循环的内部时,它怎么可能工作以及为什么它会以unindent错误崩溃?

        for m in range(len(Model)):
        if param==1:
            m=m-1

            parFlag = 0
            for s in range(len(PSets)):
                if Parameter.lower() in self._Sets._P_ModelVars[Model[m]][PSets[s]]:
                    parFlag = 1

现在进入这里时,它看起来更奇怪了:

enter image description here

我认为它可以与标签有关,但我对它们知之甚少,除非我尽可能避免使用它们。

1 个答案:

答案 0 :(得分:11)

确实,代码混合了标签和空格:

>>> from pprint import pprint
>>> pprint('''\
...                     for m in range(len(Model)):
...                 if param==1:
...                     m=m-1
... 
...                 parFlag = 0
...                 for s in range(len(PSets)):
...                     if Parameter.lower() in self._Sets._P_ModelVars[Model[m]][PSets[s]]:
...                         parFlag = 1
... '''.splitlines())
['    \t\tfor m in range(len(Model)):',
 '\t\t    if param==1:',
 '\t\t    \tm=m-1',
 '',
 '        \t    parFlag = 0',
 '        \t    for s in range(len(PSets)):',
 '\t                if Parameter.lower() in self._Sets._P_ModelVars[Model[m]][PSets[s]]:',
 '\t                    parFlag = 1']

请注意每行开头的所有\t字符组合。

一个好的文本编辑器可以让你用空格替换选项卡,还可以设置创建新缩进时应该使用的样式。 Python style guide建议您只使用空格。

您可以通过使用-tt命令行开关运行代码来检测空格和制表符的混合位置:

python -tt yourscript.py