簡體   English   中英

如何處理異常?

[英]How to handle exceptions?

這是關於最佳.net實踐的問題。 我總是在我的所有Web和窗體表單應用程序中捕獲並存儲有關異常的信息,如下所示:

  1. 用try catch包圍每個方法(異常異常)
  2. 對於除前層之外的任何層,將異常拋到上面的層
  3. 在前層,將異常記錄到日志文件(通常使用log4config.dll)並向用戶顯示用戶友好消息。

這是處理異常的最佳方法嗎? 或者我應該在下一個項目中做些不同的事情?

除非我有一些具體的原因,否則我不會加1和2; 例如改變(包裝)消息; 沒有必要,因為無論如何異常都會提升。 並且做得不正確你可能會意外地刪除所有重要的堆棧跟蹤( throw; vs throw ex; - 第一個是首選)。

您可以在處理例外的最佳實踐中獲得最佳答案

以下代碼存在問題,因為它會覆蓋e的原始堆棧跟蹤,這會使問題更難診斷:

public void Foo() {
    try {
        Bar();
    } catch(Exception e) {
        throw e; // re-throw; overwrites original stacktrace in 'e'
    }
}

以下代碼沒有上面的stacktrace覆蓋問題,但仍然是不必要的冗長:

public void Foo() {
    try {
        Bar();
    } catch(Exception e) {
        throw; // re-throw; preserves original stacktrace in 'e'
    }
}

兩者都會更好地寫成如下。 這是因為, 如果您在catch塊中唯一要做的就是重新拋出異常,則根本不需要編寫catch塊:

public void Foo() {
    Bar();
}

以下是處理異常的方法。

public void method1(){
    try{
        ....
        // all the code goes here
        // declare any helper methods throw throwable
        // eg: private boolean check1() throws Throwable{ ...}
        ....   
    }catch(Throwable t){
       System.out.println("oops...error...good luck debugging. ");
    }
}

暫無
暫無

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

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