簡體   English   中英

即使在 try catch 之后繼續程序執行

[英]Continue Program execution even after try catch

當我使用 try、catch 塊時,如果拋出任何異常,則在處理 catch 后停止程序執行。 但是,即使有異常,我也需要繼續執行程序。 任何人都可以幫助我如何做到這一點?

如果我理解正確,這就是你想要的:

try
{
    Statement1(); // <-- Exception is thrown in here
    Statement2(); // <-- You want to go here after the catch block executes
}
catch
{
    HandleException();
}

Try/catch 塊不能那樣工作。 您必須按如下方式重寫代碼:

try
{
    Statement1();
}
catch
{
}


try
{
    Statement2();
}
catch
{
}

未捕獲的異常終止執行。

如果異常被捕獲但沒有重新拋出,則執行 catch() 子句,然后執行 finally() 子句(如果有的話),然后繼續執行 try/catch/finally 塊后面的語句。

如果捕獲並重新拋出異常,則執行 catch() 子句直到並包括 throw 語句; finally() 子句(如果有的話)被執行),然后異常被(重新)拋出並且堆棧展開繼續。

由於調用堆棧已展開,finally() 子句在超出范圍時被執行,而 Dispose() 在 using 語句中聲明的變量超出范圍時被調用。

沒有發生的是控制不會(也不能)在原始異常被拋出時恢復。 聽起來您正在高級別捕獲異常 - 例如您的 Main() 方法 - 並期望在原始故障點繼續執行。

要實現這一點,您需要在處理具有上下文意義的點捕獲異常,並且在處理完異常后,要么重試失敗的操作,要么忽略問題。

做好異常處理是比較困難的; 因此,最好的異常處理實踐是不處理它的格言。 例外應該就是:例外。 你的代碼不應該拋出異常,這是正常的; 通常也不應該使用異常作為驗證技術或控制流操作符。

如果您處理了異常並且沒有從catch塊重新拋出它(或另一個異常),您的程序應該繼續。

此外,如果您正在捕獲某種類型的異常(比如 IO 異常),但是try塊中的代碼正在拋出不同類型(比如 SQL 異常),則您的catch塊沒有捕獲它,異常將冒泡直到程序終止。

你在你的catch塊中到底在做什么?

如果您談論功能(而不是程序),您可以使用 finally 來繼續您的功能

try
{

}
catch(MyException ex)
{

}
finally
{
 // other code to be done
}

但是如果你說程序崩潰,沒有任何參數的cach可以處理它。

如果你已經接觸到一個包含你的嘗試和捕捉的方法,你可以做這樣的事情......

  //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 塊中的簡單返回應該可以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM