Most arguments о том, почему было принято конструктивное решение, чтобы сделать переменные for-loop. не, локальный к контуру, предположил, что существуют популярные варианты использования.Безопасное использование переменных for-loop вне цикла
Очевидный случай использования заключается в следующем:
x = default_value
for x in iterator:
# do stuff
# do something with x here
К сожалению, часто первая линия забыто:
# should have set default value for x here
# but forgot
for x in iterator:
# do stuff
# do something with x here
Итак, когда итератор пуст, они поднимают NameError
если x
не было определено ранее.
Эта ошибка становится хуже с вложенными циклами:
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
Здесь забывая x = default_value
результатов в молчаливых ошибках вместо исключения, если inner_iterator(y)
пуст на второй или более позднюю итерации внешнего цикла.
Тестирование этих ситуаций является трудным, потому что inner_iterator(y)
не является внешним аргументом, поэтому, если тест не повезет, чтобы как-то воссоздать случай, когда он пуст, ошибка не будет обнаружена.
Все ли случаи использования хрупкие или существует безопасный способ полагаться на правило определения переменных for-loop?