簡體   English   中英

異常捕獲

[英]Exception catching

之間有什么區別

 try
 {
     ... 
 }
 catch (NHibernate.ADOException exception)
 {}

try
{
    ... 
}
catch (exception ex)
{}

在catch塊中,指定要捕獲的異常。 所以如果你有

try {}
catch(Exception e){}

它會捕獲從Exception類派生的所有異常(所以是ALL異常)。 如果你有:

try{}
catch (NHibernate.ADOException exception){}

它只會捕獲來自ADOException或從ADOException派生的異常。 因此,如果您收到ArgumentException,它將像沒有try / catch一樣通過。

我假設你是說

catch (Exception ex) {}

與第二個片段。

然后不同之處在於,第一個將僅捕獲一種特定類型的異常,即NHibernate.ADOException而第二個將針對所有可能拋出的異常進入catch塊。

第二種通常是不好的做法,因為您聲稱要處理所有可能的錯誤類型。 但是,對於所有遇到的異常,在最外層將其作為一個包羅萬象是有意義的。

強烈建議不要使用catch {Exception},因為它實際上隱藏了一個bug。 在可能引發異常的每個地方,即使需要編寫更多的代碼行,也必須僅捕獲預期的異常類型。 當引發意外異常時,程序必須崩潰,這是修復該錯誤的唯一方法。

暫無
暫無

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

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