如何重新抛出生成器的异常

时间:2013-04-14 19:51:23

标签: python exception generator

似乎在生成器上调用throw会产生一种异常。我该如何重新抛出一个异常实例(我已经抓住了)?

编辑: 考虑

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

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

但是如何抛出已存在的异常实例?

1 个答案:

答案 0 :(得分:4)

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

这完全没问题:

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

诚然,文件对此极具误导性。 The PEP至少给你一个提示:

  

提出异常的效果与语句完全相同:

raise type, value, traceback
     

在暂停点被执行。