PyCQA/flake8-bugbear

`B023` False positive

オープン

#380 opened on 2023/04/20

 (4 件のコメント) (5 件のリアクション) (0 人の担当者)Python (116 件のフォーク)github user discovery
bugenhancementhelp wanted

Repository metrics

Stars
 (1,116 個のスター)
PR merge metrics
 (平均マージ 4h 17m) (30d で 3 merged PRs)

説明

arr = ['a', 'b', 'c', 'd', 'e', 'f']
mydict = {} 
for i in range(0, len(arr)):
    def foo():
        mydict[arr[i]] = 0
    foo()

This example is obviously too simple to be realistic - our actual code has more logic in foo() and passes parameters to it, but is equivalent in terms of everything the rule cares about. We get an error of Function definition does not bind loop variable 'i'.Flake8(B023). This should not happen because foo is not a closure. It's never called outside the loop, and execution is never delayed. i should always have the correct value.

The reason we aren't immediately doing mydict[arr[i]] = 0 is because we have other logic that determines the parameters passed to foo().

コントリビューターガイド