您的第一个循环应该仍然有效-
StopIteration发电机用完后仍会上升。
所不同的是,有 是 歧义时,
StopIteration以发电机长大。是因为生成器用尽了所有要产生的东西而被隐式地提出-
还是因为委托生成器用尽了要产生的东西(可能是由于
next调用了)而没有正确处理异常而被提出了?PEP-0479试图解决这种歧义。现在,如果得到一个
StopIteration,则意味着您正在使用的生成器用完了要产生的项目。换句话说,这意味着委托生成器
在 项目用尽时 不会 被错误处理。
为了支持此更改,您的生成器应该
return而不是
StopIteration显式提高。
def gen(): yield from range(5) return
如果您尝试使用
StopIteration和
generator_stop启用它,则会发生以下情况(当python3.7出现时,它将成为默认值):
>>> from __future__ import generator_stop>>> def gen():... yield from range(5)... raise StopIteration... >>> list(gen())Traceback (most recent call last): File "<stdin>", line 3, in genStopIterationThe above exception was the direct cause of the following exception:Traceback (most recent call last): File "<stdin>", line 1, in <module>RuntimeError: generator raised StopIteration
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)