2014年1月31日 星期五

C# - Exception 例外處理(如同人生,總是會有意外)

人生總是會有例外的時候,而且這個時候,還真不少,記得過年前一個空前勝大的TGS電玩展(紳魔之塔真是破了歷史以來的紀錄),因為工作的關係,而必須要在那辦展。結果回家好死不死的,就被後面的一台機車高速追撞,所幸的是,小弟我安然無恙,要不然可能沒辦法在這邊分享文章(汗)。

人非聖賢,所以寫出的程式,當然也就不能例外了,可能定義了變數,就忘記它真正要使用的時機。再不然就是從DB取出的資料,有時出現的參數為空的忘記判斷,再不然就是寫Socket時,沒有做一些網路存取狀態的處理,等等的,總之就是,想的到的,都是例外。

C# 支援例外處理機制,當有任何的例外錯誤發生時,程式會立刻中斷,然後跳出到外層。此時,如果有任何例外處理的程式 (try … catch) 位於外層,就會接到這個例外,並可以即時處理之。否則,該例外會一直被往外丟,假如都沒有被處理,則程式將被迫中斷,系統會自行輸出例外訊息。

以下是一個會引發例外的程式,由於 a/b = 3/0 會導致嘗試以零除 (System.DivideByZeroException) 的例外,但這個例外又沒有被任何的 try … catch 段落所處理,因此整個程式會中斷並輸出錯誤訊息。

class TryExp
{
    public static void Main(string[] args)
    {
        int a = 3, b = 0;
        Console.WriteLine("a/b=" + a/b);
    }
}

要處理例外可以用 try…catch 語句,以下範例就利用 try { … } catch (DivideByZeroException ex) 捕捉了上述的除以零之例外,開發者可以在 catch 段落中進行例外處理後,再決定要如何繼續執行程式。

class TryExp
{
    public static void Main(string[] args)
    {
        try
        {
             int a = 3, b = 0;
             Console.WriteLine("a/b=" + a / b);
        }
        catch (DivideByZeroException ex)
        {
             Console.WriteLine("被除數不可為 0 !\n"+ex);
        }
    }
}

這樣的結果,就可以較容易在開發時,找出錯誤的部分。程式師要有這樣良好的習慣,對於錯誤的例外處理處理的當,有助於追踨程式。尤其是用在運算,網路程式撰寫方面,有很大的幫力。

-雲遊山水為知已逍遙一生而忘齡- 電腦神手

沒有留言:

張貼留言