我收到了一些需要维护的 Python 代码。这怎么可能工作以及为什么只有当我修改内部 for 循环的内部结构时它才会因未缩进错误而崩溃?
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
当我进入这里时,它看起来更奇怪了:
我认为这可能与选项卡有关,但我对它们了解不多,除非我尽可能避免使用它们。
没有报告 IndentationError 或任何其他错误,程序运行正常。
确实,代码混合了制表符和空格:
>>> 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 风格指南 建议您只使用空格。
您可以通过使用
-tt
命令行开关运行代码来检测空格和制表符混合的位置:
python -tt yourscript.py