2011-12-05 17 views
11

私は通常、親例外の中に含まれる元の例外を使用して例外を再発生させるC#バックグラウンドから来ています。 Rubyでも同様の概念が利用可能ですか?低レベルの例外のコンテキストを維持しながら例外を検出して発生させるにはどうすればよいですか?ruby​​ - サブ例外を使用して例外を再発生

class MyError < StandardError 
    attr_reader :original 
    def initialize(msg, original=nil); 
    super(msg); 
    @original = original; 
    end 
end 
# ... 
rescue => error 
    raise MyError.new("Error B", error) 
end 

答えて

14

Avdiグリムによって話Exceptional Rubyからのトリックを見てみましょう

def reraise ex, original 
    ex.original = original 
    raise ex 
end 

rescue StandardError => e 
    reraise ArgumentError.new('Message'), e 
end 

この方法では、標準のルビーを上げることができますあなたのカスタムエラーだけでなく、それらの親エラーを設定します。

+0

doスーパー(msg)に引数としてmsgを含める必要はありません。あなたがMyError(エラー)を発生させ、それらの変更で「あるメッセージ」を発生させた場合、暗黙の引数として「あるメッセージ」が渡されます。 – daremkd

4

あなたが延びてはStandardError:

class StandardError 
    attr_accessor :original 
end 

、あなたは例外を発生させたときに、ちょうどこのプロパティを設定します。

5

Ruby 2.1でこの問題を解決する機能が追加されました。Exception#cause

関連する問題