Перебирать список и обрабатывать StopIteration в Python красиво
Я пытаюсь выполнить итерацию по списку, и мне нужно выполнить определенную операцию, когда и только когда итерация достигла конца списка, см. пример ниже:
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")
Я считаю, что этот код не слишком Питонический, поэтому я ищу лучший способ. Я думаю, что идеальный код должен выглядеть так, как эта гипотетическая часть ниже:
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")
любые мысли приветствуются.
1 ответов
можно использовать else
после цикла for, и код внутри else
выполняется, только если вы этого не сделали break
из цикла for:
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 Exception:
handle_errors(item) # in case of no success, handle and skip to next item
else:
raise Exception("All items weren't successful")
вы можете найти это в документация for
сообщении, соответствующие части, показанные ниже:
for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]
A
break
оператор, выполненный в первом наборе, завершает цикл без выполненияelse
пунктом люкс.