def receiver():
print("Ready to receive")
# try:
while True:
n = (yield)
print("Got %s" % n)
# except GeneratorExit:
# print("Receiver done")
r = receiver()
r.next()
r.send(10)
r.close()
当我注释掉GeneratorExit时,close()不会生成回溯!为什么?但是除了active之外,我能够捕获GeneratorExit.怎么可能?
如果GeneratorExit是一个例外,那么它应该像所有其他异常一样运行并传播它正在做的事情 – 因此我能够使用except来捕获它.但是当然没有除了父python解释器之外应该捕获回溯,就像所有其他异常一样.这里有什么魔力?
最佳答案 见
generator.close() documentation.
据说StopIteration和GeneratorExit异常在内部用于指示生成器如何退出,因此是唯一不会传播给调用者的异常.
因此,如果您想重新引发GeneratorExit异常,您可能必须捕获它并将其封装在另一个自定义异常中.