簡體   English   中英

在 try catch 塊中拋出異常

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

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