尝试Catch块

时间:2008-12-12 20:02:30

标签: vb.net exception-handling

我有以下代码

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 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分: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

答案 2 :(得分: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块中显式重新抛出旧内容。它可能适合你想要的更好,但它也可能不适合。

答案 3 :(得分:1)

我认为如果你做嵌套的try块,你可以得到你想要的行为。抛出异常后,执行将转到catch块。如果没有任何东西被重新抛出,它最终会继续。