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()
不会产生追溯!为什么?但是,except
处于有效状态,我可以抓住GeneratorExit
。怎么可能?
如果GeneratorExit
是一个例外,那么它应该像所有其他异常一样运行并传播它正在做的事情 - 因此我能够使用except
来捕获它。但是当然没有except
父python解释器应该像所有其他异常一样捕获回溯。这里有什么魔力?
答案 0 :(得分:2)
请参阅generator.close() documentation。
声明StopIteration
和GeneratorExit
异常在内部用于指示生成器如何退出,因此是唯一不会传播给调用者的异常。
因此,如果您想重新引发GeneratorExit
异常,您可能必须捕获它并将其封装在另一个自定义异常中。