跳至主要内容

[Ruby] Error Handling(錯誤處理)

keywords: error, exceptions

放在 beginend 這兩個關鍵字中的方法或程式區塊(block)都可以使用 rescue 來攔截例外狀況。在測試的過程中,我們可以使用 raise 來引發錯誤,讓它進入到 rescue 中:

  • retry:當你在 rescue 區塊中捕捉到例外時,可以使用 retry 來再次從 begin 開始執行。
  • raise: 這個方法可以引發一個例外(exception),它會打斷原本程式執行的流動,例如使用 raise
  • else: 會寫在 rescue 後, ensure 之前,當程式碼的主體(begin 中的內容)沒有被引發例外的話,else 就會被執行。
  • ensure: 則可以確保某段程式碼一定會在區塊的最後被執行,不論例外是否有被引發(raise)。
# Ruby Error Handling 語法

begin
#.. 要執行的程式主體
raise # 使用 raise 可以引發例外做為測試
rescue
#.. 錯誤處理
retry # 這將會讓程式回到最開始的 begin 執行
else
#.. 如果沒有例外的話才會執行這段
ensure
#.. finally ensure execution
#.. 放在這的內容總是會被執行到
end

範例程式

a = 0
begin
puts a
if a < 5
raise # 引發例外,進入 rescue
else
puts "#{a} is bigger than 4"
end
rescue
a += 1
retry
end

在 Rails 中使用

在 Rails 中使用的方式稍有不同(更簡潔):

# app/controllers/events_controller.rb

def destroy_file
#.. do something
# raise '123123'

rescue
#.. do some rescue
end

參考