2011-11-29 37 views
4

我有以下代碼:如何檢查Rails 3.x中錯誤處理的特定救援條款?

begin 
    site = RedirectFollower.new(url).resolve 
rescue => e 
    puts e.to_s 
    return false 
end 

會拋出這樣的錯誤:

the scheme http does not accept registry part: www.officedepot.com;

the scheme http does not accept registry part: ww2.google.com/something;

Operation timed out - connect(2)

如何添加在其他救援對所有錯誤就像一樣?

因爲我想要做的不僅僅是印刷錯誤,在這種情況下返回false,其他的東西。

回答

4

檢查什麼是例外類的情況下「的計劃http不接受註冊表部分」(您可以通過puts e.class做到這一點)。我認爲這將是除 '操作超時 - (2)連接'

則:

begin 
    . 
rescue YourExceptionClass => e 
    . 
rescue => e 
    . 
end 
12

那要看情況。

我看到三個例外的描述是不同的。異常類型也不同?

如果是這樣你可以寫你的代碼是這樣的:如果異常類型是相同的

begin 
    site = RedirectFollower.new(url).resolve 
rescue ExceptionType1 => e 
    #do something with exception that throws 'scheme http does not...' 
else 
    #do something with other exceptions 
end 

那麼你仍然有一個單一的救援塊,但將決定基於正則表達式什麼。也許是這樣的:

begin 
    site = RedirectFollower.new(url).resolve 
rescue Exception => e 
    if e.message =~ /the scheme http does not accept registry part/ 
     #do something with it 
    end 
end 

這有幫助嗎?

0

重要提示:救援通配符,默認爲StandardError的。它不會拯救每一個錯誤。

例如,SignalException: SIGTERM不會rescue => error被救出。您將不得不專門使用rescue SignalException => e