您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python PEP479更改生成器内部的StopIteration处理

Python PEP479更改生成器内部的StopIteration处理

您的第一个循环应该仍然有效-StopIteration发电机用完后仍会上升。

所不同的是,有 歧义时,StopIteration以发电机长大。是因为生成器用尽了所有要产生的东西而被隐式地提出- 还是因为委托生成器用尽了要产生的东西(可能是由于next调用了)而没有正确处理异常而被提出了?PEP-0479试图解决这种歧义。现在,如果得到一个StopIteration,则意味着您正在使用的生成器用完了要产生的项目。换句话说,这意味着委托生成 项目用尽时 不会错误处理。

为了支持此更改,您的生成器应该return而不是StopIteration显式提高。

def gen():
    yield from range(5)
    return

如果您尝试使用StopIterationgenerator_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 gen
StopIteration

The 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
python 2022/1/1 18:39:30 有252人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶