1. 程式人生 > >程序try-catch的絕對健壯性之嵌套

程序try-catch的絕對健壯性之嵌套

void ati rgs 假設 主題 我們 catch 平時 sha

寫程序的過程中,我們對try-catch在熟悉不過了,捕獲異常進行處理,以保證程序的健壯性。

今日突發一想,如果我們catch中的代碼異常了怎麽辦?我們做以下一種假設

static void Main(string[] args) 
{
    try{
        //Code A
    }
    catch{
        //Code B
    }
    finally{
        //Code C
    }
} 

按照我們平時經常用的,我們在Code A的位置執行出錯之後,我們最後可能在Code B進行錯誤處理,然後可能在Code C處寫錯誤日誌。

那麽問題來了,如果我們因為某些不可預測的因素在Code B或者Code C處又出異常了怎麽辦?(雖然這種情況我沒有遇到過,哈哈)

那麽程序員以鉆牛角尖的態度實現了以下結構

static void Main(string[] args) 
{
    try{
        //Code A
        try{
            //Code B
        }
        catch{
            //Code C
        }
        finally{
            //Code D
        }
        //Code E
    }
    catch{
        //Code F
    }
    finally{
        //Code G
    }
}

按照這種結構,我們在Code F和G的位置不寫任何代碼(不寫總不會異常吧?)或者寫上絕對無錯的代碼,主題代碼還是在Code B的位置,C的位置異常處理,D的位置寫日誌。

那麽,就算catch和finally異常了,也會被外層的catch捕獲,這樣是不是就絕對的健壯了?

程序try-catch的絕對健壯性之嵌套