raise A, B
的作用是触发异常A,并将B作为异常参数传递。而raise A
则只是简单地触发异常A。
以下是一些例子(在Python 2.7解释器上运行):
class E(Exception):
pass
e = E()
raise Exception, e
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.E
raise Exception(e)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception
raise (Exception, e)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception
谢谢!
raise Exception, e
就像raise Exception(e)
,但我的例子表明它们是不同的。 - user3033336raise A, B(c)
,规则是:如果issubclass(A, BaseException)并且isinstance(B(c), A),则raise B(c);否则raise A(B(c))
。我说得对吗?谢谢! - user3033336if isinstance(B(c), A)
在这里已经足够了。 - Martijn Pieters