在提供的答案中,除了StopIteration无限期挂起并且删除迭代器超出范围

问题描述 投票:0回答:1

此前发布的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时干净利落地退出?

generator python-3.6
1个回答
0
投票

我意识到循环表达式必须只存在于try语句中。我试图将循环表达式移到try catch块之外,并且它会无限期地挂起,并在执行finally部分时更改范围。

我相信有一个更正式的答案可以打破范围,例外和提高等等。我现在知道只有办法才能做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.