例外處理

例外處理喺控制流程上係指對異常個案嘅處理。廿一世紀嘅程式語言多數都會有一啲特定嘅機制俾用家做例外處理－包括喺行一個迴圈，撞到一個異常情況嗰陣，叫個程式去行第段碼再返去個迴圈嗰度。

概論

例如 C++ 就有噉嘅功能：

include <iostream> 
using namespace std; 

int main() 
{ 
   int x = -1; // 設 x 做 -1

cout << "Before try \n"; 
   try { 
      cout << "Inside try \n"; 
      if (x < 0) // 如果 x 細過 0
      { 
         throw x; // 「掟」x
         cout << "After throw (Never executed) \n"; 
      } 
   } 
   catch (int x ) { // 掟咗 x 一個整數出去嘅話就要行呢段碼
      cout << "Exception Caught \n"; 
   } 

cout << "After catch (Will be executed) \n"; 
   return 0; 
} 

呢段碼會俾噉嘅輸出：

Before try
Inside try
Exception Caught
After catch (Will be executed)

以上呢個例子用咗 throw 一個整數 x，但 catch 可以配合任何數量或者類型嘅變數使用，例如 throw 兩個整數變數，又或者 throw 三個 float 類型嘅變數呀噉。如果冇任何一個 catch 吻合掟咗出去嗰個或柞變數，個程式通常會去個 try 以外搵相應嘅 catch，如果搵唔到就會向用家顯示一個「出錯」嘅訊息。

第啲程式語言當中都有啲類似嘅功能：受到 C++ 影響，有多款程式語言都會用 catch 呢個字做同樣嘅功能，例子有 Java 同 C#；另一方面，又有啲語言興用 exception 呢個關鍵字嚟做例外處理同用第啲關鍵字做 catch 嘅功能。好似係以下呢段用 AppleScript 寫成嘅碼噉：

try
    set myNumber to myNumber / 0
on error e  number n  from f  to t  partial result pr
    if ( e = "Can't divide by zero" ) then display dialog "You must not do that"
end try

finally 
某啲程式語言當中有 finally 嘅功能，配合 try 嚟使用。無論個程式點樣離開個 try，finally 掕嗰柞碼都會被執行。喺實際編程上，呢種功能可以要嚟確保個程式喺行完個 try 之後實會關某個檔案或者同數據庫斷線。包括 Java、C#、同 Python 等都具有呢種功能，例如以下呢段 C# 碼：

FileStream stm = null;
try {
    stm = new FileStream ("logfile.txt", FileMode.Create);
    return ProcessStuff(stm);             // may throw an exception
} finally {
    if (stm != null)
        stm.Close(); // finally 跟嗰柞碼實會行－無論個程式係以乜方法離開個 try
}

而因為「想喺做完個迴圈之後關咗個檔案佢」好普遍，有啲程式語言甚至索性有功能做呢樣嘢。例如係 C# 噉：

using (FileStream stm = new FileStream ("logfile.txt", FileMode.Create)) {
    return ProcessStuff(stm);             // may throw an exception
}

C# 程式語言內置咗，當個程式離開 using 嗰陣，個編譯器會確保啲記憶體會釋放 stm 呢舊嘢，即係教部電腦暫時將個檔案開咗佢，用完就將佢由記憶體嗰度釋放。Python 嘅 with 以及 Ruby 嘅 File.open 都會達到類似嘅效果。

冗餘
容錯性

攷 

編程