2

私のコードは次のとおりです。

try:
    *Do something*
except *anError*:
    if (condition):
        methodCalled()
    else:
        raise "my own Exception"

問題は、自分の例外 (「自分の例外」) を発生させると、「anError」例外も発生することです。自分の例外を発生させたときに、キャッチしたエラーが発生しないようにする方法はありますか?

4

1 に答える 1

4

ドキュメントの引用:

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
于 2015-01-19T15:42:00.423 に答える