Próbuję iterację listy, a ja potrzebuję do wykonywania określonej pracy wtedy i tylko wtedy, gdy iteracja osiągnął koniec listy, patrz poniższy przykład:iterację listy i obsługiwać StopIteration w Pythonie pięknie
data = [1, 2, 3]
data_iter = data.__iter__()
try:
while True:
item = data_iter.next()
try:
do_stuff(item)
break # we just need to do stuff with the first successful item
except:
handle_errors(item) # in case of no success, handle and skip to next item
except StopIteration:
raise Exception("All items weren't successful")
Wierzę, że ten kod nie jest zbyt Pythonic, więc szukam lepszego sposobu. Myślę, że idealny kod powinien wyglądać jak ten hipotetyczny element poniżej:
data = [1, 2, 3]
for item in data:
try:
do_stuff(item)
break # we just need to do stuff with the first successful item
except:
handle_errors(item) # in case of no success, handle and skip to next item
finally:
raise Exception("All items weren't successful")
Wszelkie życzenia są mile widziane.
zamień 'finally' na' else'? – WolframH
Dlaczego "Wszystkie elementy nie były skuteczne" zamiast "Wszystkie elementy nie powiodły się"? Ten środkowy apostrof przerwie łańcuch/wyjątek, jeśli zostanie uruchomiony. Również do punktu WolframH, zobacz [docs] (http://docs.python.org/reference/compound_stmts.html#for) - "else" zamiast "finally" powinno działać. – thegrinner
Warto zauważyć, że 'z wyjątkiem:' jest straszne - jeśli jest to tylko na przykład, dobrze, ale w każdym prawdziwym przykładzie, proszę tylko złapać konkretny wyjątek. –