我想写一个生成器,它可以接受来自yields的有限数量的输入,然后优雅地处理进一步的输入。抓到你最好的方法是什么
我曾经尝试过在try-except块中使用yield-from表达式将内部生成器与外部生成器包装在一起,但是StopIteration仍然会被引发
def limited_writer(max_writes):
for i in range(max_writes):
x = yield
print(x) #
def graceful_writer(l):
try:
yield from l
except StopIteration:
# Ideally will have additional handling logic here
raise Exception("Tried to write too much")
l_w = limited_writer(4)
g_w = graceful_writer(w)
g_w.send(None)
for i in range(5):
g_w.send(i)
我希望上面提到异常(但更一般地说,它提供了一种处理提供太多数据的好方法),但事实上它仍然会引发StopIteration。最好的解决方案是什么
如果您想
graceful_writer
继续接受通过其.send()
方法发送给它的数据,它需要无限期地继续产生。您当前拥有的try
/except
块实际上没有做任何事情,yield from
语句已经从limited_writer
中吸收了StopIteration
。您在顶层看到的一个来自graceful_writer
本身,当它到达代码末尾时要避免这种情况,请尝试使用无限循环,如下所示:
相关问题 更多 >
编程相关推荐