在撰寫程式的時候,錯誤處理是一件很重要的事情。在「c++程式設計規範」這本書的第71個條款裡,依照不同的錯誤處理結果,定義出三種「安全保證」等級: no-fail保證、strong保證、basic保證。這三種安全保證等級以執行方法遇到錯誤並且處理之後,是否會影響到資料或狀態來做等級區分。開發人員在撰寫每個方法之前,先決定方法的錯誤處理是屬於哪個等級,可以減少思考的範圍、避免一些不必要的過度設計。
no-fail保證
所謂的「no-fail保證」是說:執行方法一定成功、不會發生異常。在系統裡有些方法,必須設計為提供no-fail保證等級,例如:解構子、資源釋放、log紀錄…等等。這些方法通常會在錯誤處理時使用,如果錯誤處理時又會出錯,那應該就是開發人員的災難了。
以開發人員的角度來說,會希望所有方法都是no-fail保證等級。不過很殘酷的現實是,大多數的方法都會發生異常、需要錯誤處理。
strong保證
所謂的「strong保證」是說:執行方法不一定成功、但異常處理之後狀態或資料不變。系統裡最常見設計為提供strong保證等級的方法,就是使用「交易功能」的資料庫操作方法。當執行資料庫操作方法發生異常的時候,系統會rollback資料庫,讓資料庫維持呼叫方法之前的狀態。
以開發人員的角度來說,應該要盡量設計方法到達strong保證等級。方法執行的結果,要不就是正常執行完畢、要不就是發生異常可是資料或狀態不變。
basic保證
所謂的「basic保證」是說:執行方法不一定成功、但異常處理之後的狀態或資料是在「可接受範圍」裡。這邊的可接受範圍是指資料或狀態的正確性,例如說:一台轎車最多只能坐五個人,結果執行方法發生異常後,在資料庫裡留下了六個人的紀錄,這就是資料不在可接受範圍裡。
以開發人員的角度來說,basic保證等級是方法必須滿足的最低等級。當方法執行發生異常,可是異常處理之後的狀態或資料不在可接受範圍裡,這樣的執行結果應該歸類為程式的bug,必須要重新設計。因為方法執行發生異常之後,如果資料或狀態無法保證在可接受範圍裡,那只會引發蝴蝶效應產生更多的錯誤。
MySql錯誤處理 錯誤處理的例子
有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...
MySql錯誤處理(三) 錯誤處理的例子
mysql錯誤處理 三 錯誤處理的例子 有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not foun...
PHP 錯誤處理
在 php 中,預設的錯誤處理很簡單。一條訊息會被傳送到瀏覽器,這條訊息帶有檔名 行號以及一條描述錯誤的訊息。在建立指令碼和 web 應用程式時,錯誤處理是乙個重要的部分。如果您的 缺少錯誤檢測編碼,那麼程式看上去很不專業,也為安全風險敞開了大門。本教程介紹了 php 中一些最為重要的錯誤檢測方法。...