本頁重點提要

  • 01.可預期錯誤用驗證;不可預期錯誤用 try-catch 守邊界。
  • 02.外部資源(IO/HTTP/DB)要防護;內部 bug 要快速失敗並修。
  • 03.例外處理的目標是可維運性,不是把錯誤藏起來。

總則:try-catch 不是萬用膠

在工程現場,例外處理(Exception Handling)是「可維運性」的一部分。你要先決定:這個錯誤是可預期的輸入/流程問題,還是不可預期的系統問題。兩者的處理策略完全不同。

工程規範 01:能用驗證就先驗證(不要用 try-catch 當流程控制)

  • 可預期錯誤(例如:使用者輸入格式錯誤)→ 用 if/tryparse/validation 回應。
  • 不可預期錯誤(例如:IO、網路、第三方服務、未知狀態)→ 用 try-catch 包住邊界。
// ✅ 可預期:輸入錯誤,先驗證
if (!int.TryParse(input, out var age))
{
    return "請輸入數字";
}

// ✅ 不可預期:外部資源(IO/HTTP/DB),用 try-catch 守邊界
try
{
    var text = File.ReadAllText(path);
}
catch (IOException ex)
{
    // 記錄 + 回報訊息(對使用者要友善)
}

Implementation Reference
if (!int.TryParse(input, out var age)) { return; }
try { File.ReadAllText(path); } catch (IOException) { }
Switch Page