2012-05-21 68 views
6

當我運行以下內容時,救援似乎被ArgumentError忽略。 來自Ruby的ArgumentError錯誤消息出現在控制檯上,但我的放入消息沒有。 我試着用TypeError和ZeroDivisionError進行救援,它工作。Ruby忽略救援參數錯誤

def divide(a, b) 
    begin 
     a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s 
    rescue ArgumentError 
     puts 'there must be two arguments' 
    end 
end 

divide(4) 

回答

8

的沒有拋出異常的函數內部,但在點在那裏叫,所以你要抓住它別的地方:

def divide(a, b) 
    a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s 
end 

begin 
    divide(4) 
rescue ArgumentError 
    puts 'there must be two arguments' 
end 

雖然這樣的作品,趕上ArgumentError是一個非常糟糕的主意,因爲它表明你的代碼中有一個錯誤,你不應該從中恢復。

+0

謝謝。我改變了程序,現在它按預期工作。 –

+1

@Kao:在這種情況下,請考慮通過點擊側面的勾號按鈕接受答案:) –

1

這部分代碼將完成救援:a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s。您的例外情況不是在該方法中觸發的,而是在通話時觸發的,如果您明白我的意思。

+0

我明白了。謝謝。 –