您可以value
将StopIteration
(可能是StopIteration
其本身)属性视为实现细节,而不是设计用于“常规”代码中。
看一下指定了Python 3.3功能的PEP 380yield from
:它讨论了一些StopIteration
用于携带返回值的替代方法。
由于不应该在普通for
循环中获取返回值,因此没有语法。与您不应该StopIteration
明确捕获的方式相同。
一个适合您情况的好的解决方案是使用小的实用程序类(对于标准库可能足够有用):
class Generator:
def __init__(self, gen):
self.gen = gen
def __iter__(self):
self.value = yield from self.gen
这将包装任何生成器并捕获其返回值以供以后检查:
>>> def test():
... yield 1
... return 2
...
>>> gen = Generator(test())
>>> for i in gen:
... print(i)
...
1
>>> print(gen.value)
2