檢查不同的錯誤
如果要根據錯誤型別執行不同的操作,請使用多個 rescue
子句,每個子句具有不同的錯誤型別作為引數。
def divide(x, y)
begin
return x/y
rescue ZeroDivisionError
puts "Don't divide by zero!"
return nil
rescue TypeError
puts "Division only works on numbers!"
return nil
end
end
> divide(10, 0)
Don't divide by zero!
> divide(10, 'a')
Division only works on numbers!
如果要儲存錯誤以便在 rescue
塊中使用:
rescue ZeroDivisionError => e
使用不帶引數的 rescue
子句來捕獲未在另一個 rescue
子句中指定的型別的錯誤。
def divide(x, y)
begin
return x/y
rescue ZeroDivisionError
puts "Don't divide by zero!"
return nil
rescue TypeError
puts "Division only works on numbers!"
return nil
rescue => e
puts "Don't do that (%s)" % [e.class]
return nil
end
end
> divide(nil, 2)
Don't do that (NoMethodError)
在這種情況下,試圖將 nil
除以 2 不是 ZeroDivisionError
或 TypeError
,所以它由預設的 rescue
子句處理,它列印出一條訊息讓我們知道它是一個 NoMethodError
。