【问题标题】:PyLint: Using possibly undefined loop variable warningPyLint:使用可能未定义的循环变量警告
【发布时间】:2015-03-27 10:59:59
【问题描述】:

阅读this question我可以理解为什么会输出这个警告,但是我有一个特定的情况,循环变量不能被取消定义......

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

print i 

PyLinting 上面我得到了

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

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

如果是这样,最好在循环之前抑制警告或定义i(这似乎很浪费)?

【问题讨论】:

  • 如果您在代码中的某处重新定义range 会怎样?
  • 好点,感谢回复

标签: python pylint


【解决方案1】:

这是因为您的范围可能为空,具体取决于所涉及的中间执行步骤,或者它可能已在 @tobias_k 指出的代码中重新定义(尽管这会引发额外的 W: 1, 0: Redefining built-in 'range' (redefined-builtin)),因此变量 @ 987654322@可能未定义。

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

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

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

示例(不工作)

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

$ python test.py 
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    print i
NameError: name 'i' is not defined

示例(工作)

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

$ python test.py 
0
1
1

作为您问题的答案,最好抑制警告,我的回答是否定的。如果您确实想禁止它,请确保在相关代码块之后重新启用它。

【讨论】:

  • 好的,谢谢,这是因为 PyLint 不检查 range 函数(我理解它可以返回一个空列表 - 在我的特定情况下它不会) 或其他内置函数来解决这个问题。谢谢。
猜你喜欢
  • 2011-01-21
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2021-12-01
  • 1970-01-01
  • 2023-01-11
相关资源
最近更新 更多