2010-03-22 47 views
1

在團隊環境中,後異常,如果我處理異常(像這樣)的:意義(不)重新拋出登錄

protected void Page_Load(object sender, EventArgs e) 
{ 
    this.exTest(); 

} 


public void exTest() 
{ 
    try 
    { 
     throw new Exception("sjsj"); 
    } 

    catch (Exception ex) 
    { 
     string s = ex.Message; 
     throw; 
    } 

} 

的不是重新拋出異常(拋出)的含義?即使沒有關鍵字,也會使用web.config中的自定義錯誤設置(重定向到指定頁面)。

感謝

回答

4

如果不重新拋出異常,調用代碼大概會認爲這方法行得通。這通常是一個真的,真的很糟糕事情要做。

「不,我沒能完全加載您的帳戶詳細信息,因此您的銀行帳戶有0的默認平衡現在,等待我只寫數據到數據庫......在此期間,請隨時仔細閱讀我幫助生成的日誌,以顯示我爲什麼要搞砸你的數據「)

嚴重的是,記錄錯誤並不等同於處理它。你應該重新拋出一個異常,除非你實際上已經處理了一個異常,以致調用者可以有效地假定它沒有發生。

如果正在反正你的顯示錯誤頁面,那就表明,即使在這個方法失敗了,另一個也失敗了。你不應該依賴那個。

+0

如果您正趕上錯誤只是爲了記錄與諸如類和行號的附加信息,然後重新拋出,您要添加的,即使你不處理異常值好位。如果你讓異常去到UI或者其它任何的ex.message它帶來和堆棧跟蹤可以使它很難搞清楚究竟是什麼導致了問題。特別是如果你唯一的repro在生產。你可能沒有好的信息。 – user230949 2010-04-26 22:30:09

+0

@ user230949:請*請*,不要登錄並重新拋出。這將使適當的日誌記錄更加困難。總是記錄它,或重新拋出它,而不是兩者。 – sleske 2013-11-27 16:42:01

+0

@sleske:這取決於你的日誌設置和各種事情。我同意它可以讓事情變得更難 - 但它也可能非常有用。我不想總結任何一種方式。 – 2013-11-27 17:46:23

1

不重新拋出異常的後果是,你有效地忽略異常。這很少是正確的做法,因爲它掩蓋了錯誤。忽略錯誤可能會讓你的應用程序處於沒有明確定義的狀態,出現各種奇怪的副作用。總之:不要去那裏!