2017-07-18 9 views
1

私は、次の2つの機能があります。Pythonの:元の例外のアクセス例外メッセージ

ValueError例外がうまく動作し、例外のエラーメッセージを出力キャッチしよう
>>> def spam(): 
...  raise ValueError('hello') 
... 
>>> def catch(): 
...  try: 
...   spam() 
...  except ValueError: 
...   raise ValueError('test') 

>>> try: 
...  catch() 
... except ValueError as e: 
...  print(e) 
... 
test 

ですしかし、元の例外のエラーメッセージ(すなわち'hello')にアクセスする方法はありますか?私は私が完全なトレースバックを印刷することができます知っている:

>>> try: 
...  catch() 
... except ValueError as e: 
...  import traceback 
...  print(traceback.format_exc()) 
... 
Traceback (most recent call last): 
    File "<stdin>", line 3, in catch 
    File "<stdin>", line 2, in spam 
ValueError: hello 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
    File "<stdin>", line 5, in catch 
ValueError: test 

が、私は正確にその文字列からhelloを解析する必要はありません。例外のリストとそれぞれのメッセージにアクセスする方法はありますか?それでは、最初のものを取りますか?

+0

実行しているPythonのバージョンは? –

+0

Python 3.4を使用しています。 – mart1n

答えて

0

実際の例外はe.__cause__で利用できます。

+0

例外が 'raise ... from ...'ステートメントを介して発生しない限り、元の例外は '__context__'に格納され、' __cause__'には格納されません。 – vaultah

+0

@vaultah Ha、面白いです。ですから、 'print(e .__ cause__またはe .__ context __)'を使用するのが最善の方法です。 – mart1n