似乎在生成器上调用 throw 需要一种异常。我应该如何重新抛出异常实例(我已经捕获)?
编辑:考虑
def g():
try:
yield 1
except Exception as e:
yield 2
def f():
x = g()
print x.next()
print x.throw(Exception)
但是我怎样才能抛出一个已经存在的异常实例呢?
参数generator.throw(...)
完全反映raise
语句的参数。所以它不必是异常类;它可以是一个异常对象,就像raise
.
这工作得很好:
x.throw(Exception("i'm an argument"))
诚然,该文档在这方面极具误导性。 PEP至少给了你一个提示:
引发异常的效果与语句完全相同:
raise type, value, traceback
在暂停点处决。