2012-05-11 9 views
13

したがって、私は基本的にアプリケーションの2つのレイヤーを例外によって分離する必要があります。元の例外に関する情報を含む例外を元に戻すにはどうすればよいですか?

私はこのWLST 12cのスクリプト(のpython 2.2)を持って、それは

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

ようになり、私は例外の私自身のタイプのいずれかを再調達できるようにしたいと思い、それは何についてのメッセージが含まれています以前の例外が発生しました(いいえ、私はabのパラメータが何であるかはわかりませんが、例外の説明であると推測しています)。

私は自分自身のJavaの男だので、私は、私は右の質問を持って期待し

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

なぜあなたは正確にPython 2.2を使用していますか?最新の2.2リリースは2003年です。現在のバージョンでは、私が知っている限り現在のバージョンのものはありません。 – Daenyth

+0

実際にはバージョンの観点からCPythonの後ろにある 'Jython'インタプリタを使用しているようです数値 –

答えて

9

のようなものを楽しみにしています。

私は、Python 2.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')です。

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

+1

str()のないメソッドが最適です。 http://www.python.org/dev/peps/pep-3134/を参照してください。また、@ vlad-ardelean:ExceptionToThrow e .__ cause__を使用してErrorToCatchを取得することができます – Riking

+2

これは、元の例外がどこで発生したかについての情報を破棄しますが、OPが求めているように聞こえることに注意してください。 – jrennie

0
class MyException(Exception): pass 

... 

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

あなたは電子にバインドされ、ここで元の例外から情報を抽出し、その後、あなたはそれを上げたときに、独自の例外にそれを渡すことができます。

+0

ここで、マルチキャッチはタイプ – Riking

29

これは古い投稿ですが、元の質問にはもっと簡単な回答があります。例外を捕まえた後に例外を戻すには、引数なしで "raise"を使うだけです。元のスタックトレースは保持されます。

+0

を指定する最後のexcept文でなければならないことに注意してください。これは正解です。 –

関連する問題