私のコードは次のとおりです。
try:
*Do something*
except *anError*:
if (condition):
methodCalled()
else:
raise "my own Exception"
問題は、自分の例外 (「自分の例外」) を発生させると、「anError」例外も発生することです。自分の例外を発生させたときに、キャッチしたエラーが発生しないようにする方法はありますか?
ドキュメントの引用:
except または finally 節で例外を発生 (または再発生) させた場合、__context__ は自動的に最後にキャッチされた例外に設定されます。新しい例外が処理されない場合、最終的に表示されるトレースバックには、元の例外と最終的な例外が含まれます。
これはまさにあなたのケースです:
try:
try:
raise ValueError
except ValueError:
raise TypeError
except Exception as e:
print('Original:', type(e.__context__)) # Original: <class 'ValueError'>
print('Explicitly raised:', type(e)) # Explicitly raised: <class 'TypeError'>
アクティブな例外は 1 つだけです。except TypeError
代わりに書いたかもしれませんがexcept Exception
、出力は同じです。
Python が元の例外を出力しないようにするには、次を使用しますraise ... from None
。
try:
raise ValueError
except ValueError:
raise TypeError from None