2012-05-21 7 views
6

以下を実行すると、レスキューがArgumentErrorで無視されるようです。 RubyのArgumentErrorエラーメッセージがコンソールに表示されますが、putsメッセージは表示されません。 TypeErrorとZeroDivisionErrorでレスキューしようとしましたが、うまくいきました。Rubyがレスキューを無視するArgumentError

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

私はそれを手に入れます。ありがとう。 –

関連する問題