[Ruby] Error Handling(錯誤處理)
keywords: error
, exceptions
放在 begin
和 end
這兩個關鍵字中的方法或程式區塊(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