如何重新引发包含原始异常信息的异常?

2024-10-02 04:21:46 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我基本上必须通过异常将应用程序的两个层彼此隔离。

我有这个WLST 12c脚本(python 2.2),如下所示

try:
    something something...
except java.lang.UnsuportedOpperationException, (a, b):
    pass
except java.lang.reflect.UndeclaredThrowableException, (a, b):
    pass

我希望能够重新引发我自己的一种异常,它包含一条关于导致上一个异常的消息(不,我不知道ab参数是什么,但我猜其中一个应该是异常描述)。

我自己也是个爪哇人,所以我期待着

try {
    something something...
} catch (Exception e) {
    throw new RuntimeException(e, "something horrible happened");
}

Tags: 脚本应用程序消息lang参数passjavasomething
3条回答

我希望我的问题是对的。

我不确定Python2.2的细节,但是this说您可以像在更新版本中那样处理异常:

try:
    do_stuff()
except ErrorToCatch, e:
    raise ExceptionToThrow(e)

或者最后一行应该是raise ExceptionToThrow(str(e))。这取决于如何定义异常。示例:

try:
    raise TypeError('foo')
except TypeError, t:
    raise ValueError(t)

这会引发ValueError('foo')

希望有帮助:)

成语

try:
   ...
except SomeException:
   ...
   raise

@normaldotcom所提到的重新抛出已按原样捕获的错误,而不做任何修改。它不会回答OP,“如何创建一个新的异常,该异常包含有关已捕获的异常的信息”。

实际上,在某些情况下,人们希望创建一个新的异常,通常是将许多可能的内部错误源重新组合为一个具有更清晰消息的异常,同时仍保留对原始错误的回溯以启用调试。

实现这一点的方法是通过^{} method of ^{}。例如

import sys

try:
  raise ValueError('internal error message')
except ValueError:
  tb = sys.exc_info()[2]
  raise Exception('new error message').with_traceback(tb)

虽然这是一篇老文章,但对于最初的问题有一个更简单的答案。若要在捕获异常后重新引发异常,只需使用“raise”而不带任何参数。原始堆栈跟踪将被保留。

相关问题 更多 >

    热门问题