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