检索for循环中给予StopIteration的args

时间:2014-05-28 01:56:11

标签: python for-loop python-3.x generator

在python生成器中,可以返回传递给StopIteration异常的最终值:

def gen():
    yield 3
    yield 1
    return 2

> g = gen()
> next(g)
3
> next(g)
1
> next(g)
Traceback (most recent call last): ...
    next(g)
StopIteration: 2
> next(g)
Traceback (most recent call last): ...
    next(g)
StopIteration

有没有办法访问传递给for循环中引发的StopIteration的值?类似的东西:

> result = 0
> for x in gen():
    result += x
else catch StopIteration as y:
    result /= y.args[0]
> result
2

1 个答案:

答案 0 :(得分:2)

没有; for循环吞下StopIteration个例外。如果您关心StopIteration异常的详细信息,则需要自己实现迭代。

也就是说,可能有更好的方法来做你想做的事。