[英]Throw an exception in try catch block
try {
if (isFileDownloaded)
// do stuff
else
throw new CustomException()
}
catch (Exception e)
{
// something went wrong to save the error to log
}
finally
{
//release resources
}
我的問題是catch
捕獲 try 塊中拋出的ApplicationException
嗎? 它的編碼風格很差嗎?
應該用另一種方式寫嗎?
catch
將捕獲您的異常(以及發生的任何其他異常)。 話雖如此,我盡量避免編寫這樣的代碼。
就個人而言,我認為沒有理由對在同一范圍內拋出的異常進行異常處理(捕獲)。 如果您可以在方法中處理錯誤 - 也將異常處理(即:日志記錄)直接放在 try 塊中。
使用catch
更有用,IMO,用於捕獲try
塊中的方法拋出的異常。 這會更有用,例如,如果您的// do stuff
部分碰巧調用了引發異常的方法。
此外,我建議不要捕獲每個異常( Exception e
),而是捕獲您可以正確處理的特定類型的異常。 對此的一個例外是,如果您在捕獲中重新拋出異常 - 即:將它用於記錄目的但仍然讓它在調用堆棧中冒泡。
是的,它會捕獲ApplicationException
因為它是從Exception
派生的。
在大多數情況下處理基本異常應該沒問題,除非您需要記錄或執行具有不同類型異常的操作...
try {
if (isFileDownloaded)
doSomeThings();
else
throw new ApplicationException("Something expectedly unexpected happened.");
}
catch(ApplicationException e)
{
// log application exception here...
}
catch(Exception e)
{
// log all other exceptions here...
}
finally
{
// release resources...
}
此外,僅供參考, ApplicationException
自 .NET 2.0 以來已被棄用,作為派生的異常。 它從來沒有打算作為自己拋出的異常,所以你可能根本不應該使用它。
是的,catch 會捕獲您的 ApplicationException,是的,這是糟糕的編碼風格。 作為一個很好的一般規則,只捕獲特定的異常和那些你將要處理的異常,比如修復應用程序狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.