栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

您的第一个循环应该仍然有效-

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661866.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号