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

假设 ExceptionType1 由第 1 节处理的代码抛出。在第 1 节处理之后,我可以将控制权传递给第 2 节/第 3 节吗?那可能吗?

4

4 回答 4

9

更改代码以在一个块中捕获所有异常,并从那里确定类型和执行路径。

于 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 块。如果什么都没有被重新抛出,它会移动到 finally。

于 2008-12-12T20:08:01.237 回答