2

似乎在生成器上调用 throw 需要一种异常。我应该如何重新抛出异常实例(我已经捕获)?

编辑:考虑

def g():
    try:
        yield 1
    except Exception as e:
        yield 2

def f():
   x = g()
   print x.next()
   print x.throw(Exception)

但是我怎样才能抛出一个已经存在的异常实例呢?

4

1 回答 1

4

参数generator.throw(...)完全反映raise语句的参数。所以它不必异常类;它可以是一个异常对象,就像raise.

这工作得很好:

x.throw(Exception("i'm an argument"))

诚然,该文档在这方面极具误导性。 PEP至少给了你一个提示:

引发异常的效果与语句完全相同:

raise type, value, traceback

在暂停点处决。

于 2013-04-14T20:17:06.990 回答