8

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

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)
4

2 に答える 2

9

例外は関数内ではスローされませんが、呼び出された時点でスローされるため、別の場所でキャッチする必要があります。

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することは非常に悪い考えです。それは、回復できないはずのコードのエラーを示しているからです。

于 2012-05-21T21:31:26.290 に答える
1

レスキュー-コードのこの部分に対して実行されます:a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s。あなたの例外はメソッドではなく、呼び出し時にトリガーされます。

于 2012-05-21T21:31:34.327 に答える