当我使用try,catch块时,如果抛出任何异常,则在处理catch之后停止执行程序。但是,即使有异常,我也需要继续执行程序。任何人都可以帮我怎么做吗?
答案 0 :(得分:9)
未捕获的异常终止执行。
如果捕获了异常而没有重新抛出异常,则执行catch()子句,然后执行finally()子句(如果有的话),然后继续执行try / catch / finally块之后的语句。
如果捕获并重新抛出异常,则执行catch()子句,直到并包括throw语句;执行finally()子句(如果有的话),然后(重新)抛出异常并继续堆栈展开。
当调用堆栈被展开时,finally()子句在超出范围时执行,而Dispose()被调用为变量声明在using语句超出范围。
没有发生的是控件在抛出原始异常时不会(也不能)恢复。听起来你正在高级别捕获异常 - 例如你的Main()方法 - 并期望执行在原始故障点继续。
要实现这一点,您需要在处理使上下文有意义的时刻捕获异常,并且在处理异常后,重试失败的操作或忽略该问题。
做好异常处理相当困难;因此,最好的异常处理实践是不处理它的格言。例外应该只是:例外。你的代码当然不应该抛出异常;您通常也不应将例外用作验证技术或控制流操作符。
答案 1 :(得分:7)
如果我理解正确,这就是你想要的:
try
{
Statement1(); // <-- Exception is thrown in here
Statement2(); // <-- You want to go here after the catch block executes
}
catch
{
HandleException();
}
尝试/捕获块不起作用。您必须按如下方式重写代码:
try
{
Statement1();
}
catch
{
}
try
{
Statement2();
}
catch
{
}
答案 2 :(得分:3)
如果您处理异常并且不从catch
块重新抛出异常(或其他异常),您的程序应该恢复。
此外,如果要捕获某种类型的异常(例如IO异常),但try
块中的代码抛出了不同的类型(例如SQL异常),那么catch
块如果没有抓住它,那么例外情况就会冒出来直到程序终止。
你在catch
街区做了什么?
答案 3 :(得分:2)
如果你谈论功能(不是程序),你可以使用finally来继续你的功能
try
{
}
catch(MyException ex)
{
}
finally
{
// other code to be done
}
但是如果你说程序崩溃,那么没有任何参数的cach
就可以处理它。
答案 4 :(得分:0)
如果您已经找到了一个包含try and catch的方法,则可以执行以下操作……
//Start Here
exceptionMethod()
//Code will continue here after you've returned from your catch block in exceptionMethod()
doSomeMoreStuff()
exceptionMethod()
try{
doStuff()
}
catch(Exception e){
return
}
在catch块中简单返回即可解决问题。