此前发布的How yield catches StopIteration exception?和接受的答案显示如下:
iterator = iter(iterable)
try:
while True:
item = next(iterator)
do_stuff(item)
except StopIteration:
pass
finally:
del iterator
Python 3.6.4传递中的问题无限期地挂起,从不干净地关闭程序。
del抱怨迭代器没有被定义。我的假设是范围变化。
任何想法如何在引发StopIteration时干净利落地退出?
我意识到循环表达式必须只存在于try语句中。我试图将循环表达式移到try catch块之外,并且它会无限期地挂起,并在执行finally部分时更改范围。
我相信有一个更正式的答案可以打破范围,例外和提高等等。我现在知道只有办法才能做到这一点。