我正在尝试遍历一个列表,当且仅当迭代到达列表末尾时我需要执行特定操作,请参见下面的示例:
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")
我相信这段代码不太像 Pythonic,所以我正在寻找更好的方法。我认为理想的代码应该看起来像下面这个假设的片段:
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")
欢迎任何想法。
最佳答案
您可以在 for 循环之后使用 else
,并且 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")
您可以在 documentation for the for
statement 中找到它, 相关部分如下所示:
for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]
A
break
statement executed in the first suite terminates the loop without executing theelse
clause’s suite.
关于python - 遍历列表并在 Python 中漂亮地处理 StopIteration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11352099/