1. ホーム
  2. パイソン

[解決済み】Pythonでカスタムメッセージで同じExceptionを発生させる方法は?

2022-04-13 11:59:53

質問

私はこれを持っています try ブロックを作成しました。

try:
    do_something_that_might_raise_an_exception()
except ValueError as err:
    errmsg = 'My custom error message.'
    raise ValueError(errmsg)

厳密には、私が実際に上げているのは もう一つ ValueError ではなく ValueError で投げられた do_something...() と呼ばれるものである。 err この場合 カスタムメッセージはどのように err ? 次のコードを試してみましたが、以下の理由で失敗しました。 err , a ValueError インスタンス 呼び出すことができない。

try:
    do_something_that_might_raise_an_exception()
except ValueError as err:
    errmsg = 'My custom error message.'
    raise err(errmsg)

解決方法は?

更新してください。 Python 3 の場合は、以下を参照してください。 Benの回答


現在の例外にメッセージを添付して再出現させること。 (外側のtry/exceptは効果を示すためだけです)

Python 2.x で x>=6 の場合。

try:
    try:
      raise ValueError  # something bad...
    except ValueError as err:
      err.message=err.message+" hello"
      raise              # re-raise current exception
except ValueError as e:
    print(" got error of type "+ str(type(e))+" with message " +e.message)

これはまた、正しいことを行うでしょう もし err 派生 から ValueError . 例えば UnicodeDecodeError .

に好きなものを追加できることに注意してください。 err . 例えば err.problematic_array=[1,2,3] .


編集する Ducan のコメントで、上記は python 3 では動作しないことが指摘されています。 .message のメンバーではありません。 ValueError . その代わりに、次のように使うことができます (有効な Python 2.6 以降または 3.x):

try:
    try:
      raise ValueError
    except ValueError as err:
       if not err.args: 
           err.args=('',)
       err.args = err.args + ("hello",)
       raise 
except ValueError as e:
    print(" error was "+ str(type(e))+str(e.args))

Edit2:

目的によっては、自分の変数名の下に余分な情報を追加することも可能です。python2、python3ともに。

try:
    try:
      raise ValueError
    except ValueError as err:
       err.extra_info = "hello"
       raise 
except ValueError as e:
    print(" error was "+ str(type(e))+str(e))
    if 'extra_info' in dir(e):
       print e.extra_info