如何重新抛出包含原始异常信息的异常?

vla*_*ean 14 python exception-handling wlst python-2.2

所以我基本上必须通过异常将两层应用程序隔离开来.

我有这个WLST 12c脚本(python 2.2),就像

try:
    something something...
except java.lang.UnsuportedOpperationException, (a, b):
    pass
except java.lang.reflect.UndeclaredThrowableException, (a, b):
    pass
Run Code Online (Sandbox Code Playgroud)

我希望能够重新提出我自己的一个异常类型,其中包含有关导致前一个异常的原因的消息(不,我不知道ab参数是什么,但我猜一个它们应该是例外描述).

我自己就是一个java人,所以我很期待

try {
    something something...
} catch (Exception e) {
    throw new RuntimeException(e, "something horrible happened");
}
Run Code Online (Sandbox Code Playgroud)

小智 31

虽然这是一篇旧文章,但对原始问题有一个更简单的答案.要在捕获异常后重新抛出异常,只需使用不带参数的"raise".将保留原始堆栈跟踪.


Lev*_*sky 8

我希望我的问题是正确的.

我不确定Python 2.2的细节,但是表示你可以像在更新的版本中那样处理异常:

try:
    do_stuff()
except ErrorToCatch, e:
    raise ExceptionToThrow(e)
Run Code Online (Sandbox Code Playgroud)

或者也许最后一行应该是raise ExceptionToThrow(str(e)).这取决于您的异常定义方式.例:

try:
    raise TypeError('foo')
except TypeError, t:
    raise ValueError(t)
Run Code Online (Sandbox Code Playgroud)

这引起了提升ValueError('foo').

希望能帮助到你 :)

  • 请注意,这会丢弃有关原始异常发生位置的信息,但这听起来就像OP要求的那样. (2认同)