Most argumentsなぜforループ変数を作成するのが設計されたのか約ではなく、がループのローカルにあります。ループ外のfor-loop変数を安全に使用すること
明白なユースケースはこれです:
x = default_value
for x in iterator:
# do stuff
# do something with x here
残念ながら、多くの場合、最初の行を忘れてしまった:イテレータが空の場合x
が先に定義されていない場合
# should have set default value for x here
# but forgot
for x in iterator:
# do stuff
# do something with x here
だから、彼らはNameError
を上げます。
この間違いは、ネストされたループを有する悪くなる:ここ
for y in outer_iterator:
# should have set default value for x here
# but forgot
for x in inner_iterator(y):
# do stuff
# do something with x
inner_iterator(y)
は、外側のループを介して、第2またはそれ以降の反復で空の場合代わりに、例外のサイレントエラーでx = default_value
結果を忘れ。
inner_iterator(y)
は外的な議論ではないので、これらの状況をテストするのは難しいので、空である場合に何らかの形で再現するテストがなければ、バグは検出されません。
すべてのユースケースは壊れやすいか、for-loop変数のスコープルールに頼っている安全な方法がありますか?