我有以下代码
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部分吗?这可能吗?
答案 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块。如果没有任何东西被重新抛出,它最终会继续。