PyLint:使用可能未定义的循环变量警告

2024-10-03 02:41:28 发布

您现在位置:Python中文网/ 问答频道 /正文

读了this question之后,我可以理解为什么会输出这个警告,但是我有一个特定的情况,即循环变量不能被定义。。。在

for i in range(0, 2):
    print i

print i 

把上面的塔吊起来我明白了

^{pr2}$

PyLint是否不够聪明,不能注意到在这种情况下,内置的range()函数将始终生成一个填充列表,因此i将始终为最后一个print语句设置?我能理解它是否是一个未定义的函数,因为PyLint不可能知道函数的作用。。。但在这种情况下,它是一个众所周知的函数,这种用法肯定会很常见吗?在

如果是这样的话,最好是取消警告还是在循环之前定义i(这看起来很浪费)?在


Tags: 函数in警告列表for定义情况range
1条回答
网友
1楼 · 发布于 2024-10-03 02:41:28

这是因为您的范围可能是空的,这取决于所涉及的中间执行步骤,或者它可能在代码中被重新定义为@tobias_k(尽管这将抛出一个额外的W: 1, 0: Redefining built-in 'range' (redefined-builtin)),因此,变量{}可能没有被定义。在

注意,pylint根本不执行代码,它只是做静态分析,所以它不会检查范围内的值。因此,当它看到在for块中定义的变量可能超出范围被重用时,它会抱怨。在

考虑下面的示例,其中pylint显示相同的警告,但一个运行,而另一个抛出异常:

W:  4, 6: Using possibly undefined loop variable 'i' (undefined-loop-variable)

示例(不起作用)

^{pr2}$

示例(工作)

$ cat test.py 
for i in range(0, 2):
        print i
print i

$ python test.py 
0
1
1

作为对您问题的回答,是否最好取消警告,我的回答是“否”。如果您确实要取消警告,请确保在相关代码块之后重新启用它。在

相关问题 更多 >