2016-03-21 6 views
2

私は、次のしていると仮定します。レスキューブロックで発生した例外をキャッチするRubyの方法は何ですか?

begin 
    raise 'Exception!' 
rescue => e 
    puts "Rescued exception: #{e.message}" 
    raise 'Something I did in this block raised an exception!' 
end 

2番目の例外をキャッチするRubyistの方法は何ですか?それを別の救助ブロックに包むのが最善でしょうか、それともより洗練された解決策がありますか?

+0

場合:そう例えば、例外は無視できるほど稀であることを証明するエラー、そしてよりもむしろ救助ブロックの内部救助ブロックの巣を始め、独自の例外を処理する別のメソッドを呼び出して行うことができない場合Railsには 'rescue_from'もあります。 – tadman

答えて

4

は私が Rubyistの道を話すが、ここで Rubyistの方法ですができません。

は、できるだけエラー証拠として救助コードを作成します。

def foo 
    1/0 
rescue 
    complicated_foo_error_handler 
end 

private 

def complicated_foo_error_handler 
    # handle foo errors 
rescue 
    complicated_complicated_foo_error_handler_error_handler 
end 

def complicated_complicated_foo_error_handler_error_handler 
    # handle complicated_foo_error_handler errors 
rescue 
    STDERR.puts 'I give up!' 
    exit false 
end 
+0

これは、ハンドラ内で例外を処理することを前提としています。場合によっては、レスキューから例外を伝播するか、呼び出し元の問題をより正確に記述する別の例外を発生させたい場合があります。私は、OPが必要とするものを100%確信していません。 – Amadan

関連する問題