Existe uma maneira muito pitônica de escrever essa expressão sem escrever explicitamente um bloco try-exceto para um StopIteration
:
# some_iterable is some collection that can be iterated over
# e.g., a list, sequence, dict, set, itertools.combination(...)
for value in some_iterable:
print(value)
Você pode ler as PEPs relevantes 234 255 se quiser saber mais sobre o porquê de ter StopIteration
sido introduzido e a lógica por trás dos iteradores.
Um princípio geral em python é ter uma maneira de fazer alguma coisa (ver import this
) e, de preferência, ser bonito, explícito, legível e simples, o que o método pitônico satisfaz. Seu código equivalente é necessário apenas porque o python não fornece aos iteradores uma hasNext
função de membro; preferindo que as pessoas passem pelos iteradores diretamente (e se você precisar fazer outra coisa, tente ler e capturar uma exceção).
Essa captura automática de uma StopIteration
exceção no final de um iterador faz sentido e é um análogo do EOFError
gerado se você ler além do final do arquivo.