Python 代码中的缩进似乎不正确,但代码运行[重复]

问题描述 投票:0回答:1

我收到了一些需要维护的 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

当我进入这里时,它看起来更奇怪了:

enter image description here

我认为这可能与选项卡有关,但我对它们了解不多,除非我尽可能避免使用它们。

没有报告 IndentationError 或任何其他错误,程序运行正常。

python indentation
1个回答
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 风格指南 建议您只使用空格。

您可以通过使用

-tt
命令行开关运行代码来检测空格和制表符混合的位置:

python -tt yourscript.py
© www.soinside.com 2019 - 2024. All rights reserved.