[英]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.