2013-04-14 25 views
2

看起来,调用生成器时抛出一个异常类型。我应该如何重新抛出一个异常(我已经抓到)的实例?如何向生成器重新抛出异常

编辑: 考虑

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

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

但我怎么能扔掉已经存在异常的实例?

+0

您能否详细解释您的问题?可能会显示一些代码?目前还不是很清楚。 –

+1

Python没有'catch'。 – millimoose

+0

噢....这很尴尬。我修正了这一点。 –

回答

4

参数generator.throw(...)正好镜像raise语句的参数。所以它不会是一个异常类;它可以是一个例外对象,就像raise一样。

这工作完全正常:

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

的文档,无可否认,在这个极其错误的。 The PEP至少给你一个提示:

提高例外的效果是完全一样的语句:

raise type, value, traceback 

在悬挂点被执行。

+0

我试过了,看到它的工作......我只是不知道这是否被定义为工作,根据标准 –

+0

3年多后,文档仍然误导了这一点!感谢这个答案。 –