尝试catch后继续执行程序

时间:2010-12-29 19:52:54

标签: c# .net exception-handling oop

当我使用try,catch块时,如果抛出任何异常,则在处理catch之后停止执行程序。但是,即使有异常,我也需要继续执行程序。任何人都可以帮我怎么做吗?

5 个答案:

答案 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块中简单返回即可解决问题。