1

私は次のコードを持っています

Try
    'Some code that causes exception
Catch ex as ExceptionType1
    'Handle Section - 1
Catch ex as ExceptionType2
    'Handle section - 2
Catch ex as ExceptionType3
    'Handle section - 3    
Finally
    ' Clean up
End Try

セクション-1で処理されるコードによってExceptionType1がスローされたとします。セクション1でそれを処理した後、セクション2 /セクション3に制御を渡すことができますか?それは可能ですか?

4

4 に答える 4

9

1つのブロックですべての例外をキャッチし、そこからタイプと実行パスを決定するようにコードを変更します。

于 2008-12-12T20:06:42.470 に答える
3

例外ハンドラーで関数を呼び出すことができます。

Try
'Some code that causes exception'
Catch ex as ExceptionType1
  handler_1()
  handler_2()
  handler_3()
Catch ex as ExceptionType2
  handler_2()
  handler_3()
Catch ex as ExceptionType3
  handler_3()
Finally
  handler_4()    
End Try
于 2008-12-12T20:10:10.110 に答える
2

あなたは言語を指定していません、そして私は言語を知らないので、私は一般的に答えます。

あなたはそれをすることはできません。共通のコードが必要な場合は、に入れますfinally。または、一部のキャッチケースに対してのみ実行する必要がある場合は、そのコードをそれぞれのケースにコピーできます。コードが大きく、冗長性を避けたい場合は、コードを独自の関数に入れることができます。それでコードの可読性が低下する場合は、try / catchブロックをネストできます(少なくともJavaとC ++では。言語についてはわかりません)。Javaでの例を次に示します。

class ThrowingException {
    public static void main(String... args) {
        try {
            try {
                throw new RuntimeException();
            } catch(RuntimeException e) {
                System.out.println("Hi 1, handling RuntimeException..");
                throw e;
            } finally {
                System.out.println("finally 1");
            }
        } catch(Exception e) {
            System.out.println("Hi 2, handling Exception..");
        } finally {
            System.out.println("finally 2");
        }
    }
}

これは印刷されます:

Hi 1, handling RuntimeException..
finally 1
Hi 2, handling Exception..
finally 2

共通のコードを外側のcatchブロックに入れます。ネストされたバージョンを使用してこれを行うと、catchブロックで古いものを明示的に再スローせずに例外が発生した場合も処理されます。それはあなたが望むものにさらに良く合うかもしれませんが、そうでないかもしれません。

于 2008-12-12T20:15:02.673 に答える
1

ネストされたtryブロックを実行すると、必要な動作を得ることができると思います。例外がスローされると、実行はcatchブロックに進みます。何も投げ戻されなければ、ついに進みます。

于 2008-12-12T20:08:01.237 に答える