【问题标题】:How to handle a StopIteration exception while dealing with generator处理生成器时如何处理 StopIteration 异常
【发布时间】:2013-12-19 13:45:40
【问题描述】:

我正在使用生成器,并且我有以下代码。我对它的逻辑有点困惑。

只要最后有一个“False”,函数中的生成器就可以正常工作。删除它会在运行函数时导致StopIteration 异常。

谁能在这里解释一下False的作用?

>>> def some(coll, pred= lambda x:x)
...    return next((True for item in coll if pred(item)),False)
... 
>>> some([0,'',False])
False
>>> def some(coll, pred= lambda x:x):
...     return next((True for item in coll if pred(item)))
...
>>> some([0,'',False])
Traceback (most recent call last):
  File "<pyshell#64>", line 1, in <module>
    some([0,'',False])
  File "<pyshell#63>", line 2, in some
    return next((True for item in coll if pred(item)))
StopIteration

【问题讨论】:

标签: python python-3.x iterator generator


【解决方案1】:

如果生成器表达式引发StopIteration 异常,您将传入next() function 的默认值以返回。 False 是这里返回的默认值:

通过调用其__next__() 方法从迭代器 中检索下一项。如果给出 default,则在迭代器耗尽时返回,否则将引发 StopIteration

提高StopIteration 是迭代器传达它们已完成并且不能再用于产生结果的方式。生成器是一种特殊类型的迭代器。

你不必传入False;任何有效的 Python 值都可以。如果省略 default 参数,也可以省略生成器括号:

next(True for item in coll if pred(item))

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 2013-11-20
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 2012-07-07
    • 2019-11-07
    • 1970-01-01
    相关资源
    最近更新 更多