热门问题
时间线
聊天
视角

例外處理

局势计算机编程 来自维基百科,自由的百科全书

Remove ads

計算電腦編程領域中,例外處理(英語:exception handling,也意譯為異常處理),指的是在程式執行英語Execution (computing)期間,對出現的例外或異常情況的回應處理機制。一般而言,例外打斷正常的執行流程並執行預先登記的「例外處理器」,具體處理措施依賴於它是硬體還是軟體例外,還有軟體例外是如何實現的。

例外是由電腦系統的不同層級來定義的,典型的層級有CPU定義的中斷作業系統(OS)定義的訊號程式語言定義的例外。每個層級都要求不同例外處理方式,但是它們可以是關聯的,比如說CPU中斷可能被轉變成OS訊號。一些例外(特別是硬體例外)可以被優雅地處理,使得程式執行能在它被中斷的地方恢復。

硬體的例外處理

硬體的例外處理機制由CPU完成。這種機制支援錯誤檢測,在發生錯誤後會將程式流跳轉到專門的錯誤處理常式中。發生例外前的狀態儲存在棧上。[1]

作業系統的例外處理

針對程式中可能發生的例外,作業系統可能通過IPC來提供對應的處理設施。行程執行過程中發生的中斷通常由操作提供的「中斷服務子程式」處理,作業系統可以藉此向該行程傳送訊號。行程可以通過註冊訊號處理器的方式自行處理訊號,也可以讓作業系統執行預設行為(比如終止該程式)。

從行程的視角,硬體中斷相當於可恢復例外,雖然中斷一般與程式流本身無關。

程式語言的例外處理

程式語言領域,通常例外(英語:exception)這一術語所描述的是一種資料結構,該資料結構可以儲存例外的相關訊息。例外處理的常見的一種機制是移交控制權。引發(raise)例外,也叫作丟擲(throw)例外,通過該方式達到移交控制權的效果。例外丟擲後,控制權會被移交至某處的接住(catch),並執行處理。

程式語言的錯誤處理

錯誤處理(error handling)是通過處理常式的返回值的形式從而處理錯誤的一種編程方式。在Go等返回值可為複數的語言中,可通過將其中一個值設為錯誤值,從而達到錯誤處理的效果。

f, err := os.Open("filename.ext")
if err != nil {
    log.Fatal(err)
}
// do something with the open *File f

在僅僅支援返回狀態碼的語言裡,可通過處理錯誤碼,達到錯誤處理的效果。shell語言可通過$?獲得函式執行的退出碼,從而判斷是否出錯。

在其他語言中,可以通過判斷結果的某一個特徵,從而達到錯誤處理部分的效果,但不意味著這些語言自身支援錯誤處理。如,Java等物件導向的語言往往會通過null值判斷是否執行失敗,但有時候也會通過例外處理判斷是否執行失敗。

參照

外部連結

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads