首页 > 解决方案 > python:检查变量重新定义为循环变量

问题描述

在 python 中,您可以通过为循环变量指定一个已经存在于其余代码中的名称来创建相当难以发现的错误。

该模式如下所示:

idx = 0 # the result of some calculations

for idx in range(10):
    # do something

# use idx and expect it to be 0
# surprise, idx is actually 9

当然,显而易见的解决方案是使用更好的变量名。但是,即使您使用了非常具有描述性的名称,在您的代码中的其他地方,相同的名称仍然可能是一个不错的选择。

特别是在数字代码中,索引太多以至于很难跟踪。变量几乎永远不会超出范围:

for idx in range(10):
    # do something

# idx is now in scope
# autocomplete will suggest idx, but it is still fine as a loop variable
for idx in range(10):
    # do something

是否可以为这个问题设置一个 linter?

每当我将变量用作已在封闭范围中定义的循环变量时,我都希望得到警告。该规则需要范围及其子范围的概念。上面的第一个代码示例应该创建一个警告。在第二个示例中,循环变量已经存在于外部范围中,但它已定义在封闭范围的子范围内。那应该没问题。

标签: pythonstatic-analysispylint

解决方案


推荐阅读