今天這個主題主要是因為工作上剛好在處理到 http 的 404 error 和 500 error 的 case,想說不如就趁機將研究的內容記錄下來,釐清 ruby 的Error Handling
機制是如何運作。
所謂的Error Handling
就是指當我們執行程式遇到錯誤時的錯誤處理機制,我們可以先看一下這張錯誤的架構圖(如圖):
Ruby 中的錯誤處理機制提供我們捕獲錯誤和處理程式運行中可能發生的錯誤,以確保程式能夠正常執行,而不是直接爛掉或產生不可控制的行為。
指當程式執行過程中發生了意外或不正常的狀況,而導致程式無法正常繼續執行的事件。異常通常代表了錯誤、問題或不正確的情況,需要被處理或捕獲。
異常處理通常包括以下步驟:
try-catch
或 begin-rescue
(在Ruby中)等結構來捕獲異常。這允許程式在發生異常時採取特定的處理步驟。Ruby 使用 begin
、rescue
和 end
關鍵字來實現錯誤處理,這些關鍵字可以用於監視可能引發異常的代碼區塊。
begin
# 可能引發異常的程式碼
rescue SomeErrorClass => e
# 當 SomeErrorClass 的異常發生時,進行處理的程式碼
else
# 如果沒有發生異常,執行的代碼
ensure
# 無論是否有異常都會執行的代碼
end
begin
: begin
標記了開始監視可能引發異常的程式碼區塊。rescue SomeErrorClass => e
: rescue
用於捕獲異常。在這裡,SomeErrorClass
是想要捕獲的異常類別(例如 StandardError
或自定義的異常類別),e
是一個變數,用來包含捕獲到的異常的實例。可以使用這個變數來印出異常的相關信息。else
: 包含在沒有異常發生時要執行的程式碼,通常可以省略它。ensure
: 無論是否發生異常都要執行的程式碼,通常用於執行清理操作,無論是否發生了異常,都會確保資源被釋放或其他必要的操作被執行。舉例:
begin
# 可能引發異常的代碼
result = 10 / 0 # 這裡會引發 ZeroDivisionError
rescue ZeroDivisionError => e
# 當 ZeroDivisionError 異常發生時,進行處理的代碼
puts "錯誤訊息: #{e.message}"
else
puts "這段程式碼不會執行,因為有異常發生"
ensure
puts "這段程式碼一定會執行,不論是否有異常"
end
參考資料: