Não estou perguntando sobre as regras de escopo do Python; Geralmente eu entendo como o escopo funciona em Python para loops. Minha pergunta é por que as decisões de design foram tomadas dessa maneira. Por exemplo (sem trocadilhos):
for foo in xrange(10):
bar = 2
print(foo, bar)
O acima será impresso (9,2).
Isso me parece estranho: 'foo' está realmente apenas controlando o loop, e 'bar' foi definido dentro do loop. Entendo por que pode ser necessário que 'bar' seja acessível fora do loop (caso contrário, os loops teriam funcionalidade muito limitada). O que não entendo é por que é necessário que a variável de controle permaneça no escopo após a saída do loop. Na minha experiência, ele simplesmente atravessa o espaço para nome global e dificulta a detecção de erros que seriam detectados por intérpretes em outros idiomas.
for
loop atravesse seu namespace global, envolva-o em uma função. Encerramentos em abundância!