把例外消除、或在模組內屏蔽例外,只在「該例外資訊在模組外不被需要」時合理

本章的例子(Tcl unset、Java substring)都符合這個條件——少數情境下呼叫端真的需要知道,仍可透過其他方式取得。

反例:屏蔽過頭#

某學生團隊的網路通訊模組:

  • 所有網路例外都吞掉:發生網路錯誤就丟掉,繼續執行
  • 結果:使用該模組的應用無法察覺訊息遺失或對端伺服器失效
  • 沒有這資訊,根本無法建構穩健的應用

這種情況下,模組必須暴露例外——即使會增加介面的複雜度。

一以貫之的原則#

例外的處理就像軟體設計的其他面向——判斷什麼重要、什麼不重要

  • 不重要的東西 → 越多隱藏越好
  • 重要的東西 → 必須暴露