我收到了一些要维护的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
现在进入这里时,它看起来更奇怪了:
我认为它可以与标签有关,但我对它们知之甚少,除非我尽可能避免使用它们。
答案 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