0

別の関数内で呼び出される関数のコードがあります (リファクタリングの結果)。

したがって、呼び出された関数には、try-catch ステートメントの巨大なブロックがあります。

def Called():
     try:
         #All statements for the function in the try block.
     except A:
         # Exception handler.
     except B:
         # Exception handler.
     except A: 
         # Exception handler.

私が抱えている問題は、同じタイプの 2 つの例外をキャッチする必要があることです (Called 関数の異なる場所で)。これらは Calling 関数によって処理されます。

1 つの方法は、Called 関数内に 2 つの try-except ブロックを定義することです。しかし、呼び出し関数が同じタイプの 2 つの例外を異なる方法で処理する方法を理解していません。

4

2 に答える 2

4

これは宣伝どおりには機能しません。最初のexcept A句のみが実行されます。必要なのは、例外をさらに検査するための句tryのロジック、または(ブロック内のコードで許可されている場合)いくつかのtry-exceptブロックです。

前者のアプローチの例:

try:
    something_that_might_fail()
except A as e:
    if e.is_harmless():
        pass
    elif e.is_something_we_can_handle():
        handle_it()
    else:
        raise    # re-raise in the hope it gets handled further up the stack
于 2013-01-22T16:51:56.547 に答える