15

したがって、基本的に、アプリケーションの 2 つのレイヤーを例外によって互いに分離する必要があります。

私はこのWLST 12cスクリプト(python 2.2)を持っています。

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

a以前の例外の原因に関するメッセージを含む、独自のタイプの例外の 1 つを再発生できるようにしたいと思います (いいえ、パラメーターとパラメーターが何であるかはわかりませんbが、1 つ推測しています)。それらのうち、例外の説明にする必要があります)。

私自身Javaの男なので、次のようなものを楽しみにしています

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

5 に答える 5

32

これは古い投稿ですが、元の質問にはもっと簡単な答えがあります。例外をキャッチした後に再スローするには、引数なしで「raise」を使用します。元のスタック トレースは保持されます。

于 2014-06-03T21:03:27.407 に答える
9

質問が正しかったことを願っています。

Python 2.2 の仕様についてはよくわかりませんが、これは、最近のバージョンと同じ方法で例外を処理できることを示しています。

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')ます。

それが役に立てば幸い :)

于 2012-05-11T17:17:16.327 に答える
0
class MyException(Exception): pass

...

try:
    my_funcion(my_args)
except (IOError, KeyError, some_list_of_other_possible_exceptions), e:
    raise MyException("Uh oh")

ここではeにバインドされている元の例外から情報を抽出し、それを発生させたときにそれを独自の例外に渡すことができます。

于 2012-05-11T17:21:46.853 に答える