2016-05-10 3 views
4

バックトレースを使用して例外を作成するにはどうすればよいですか?メッセージとバックトレースを使用して手動で例外を作成する方法

私たちは、この達成するために、このような何かを行うことができます知っている:

begin 
    raise StandardError, "message" 
rescue StandardError => exception 
    exception.backtrace 
end 

それとも

exception = StandardError.new("message") 
exception.set_backtrace(caller) 

をしかし、私はこのような何かを探しています:

exception = StandardError.new("message", backtrace: caller) 

があります私はカスタマイズされたメッセージとバックトレースで例外を初期化できますか?

ありがとうございます!!!

答えて

6

バックトレースを使用して例外を初期化することはできませんが、初期化の直後に割り当てることができます。自分で機能的なクラスの

exception = StandardError.new("message") 
exception.set_backtrace(caller) 
0

ラップ:

class ErrorCreator 
    def self.new(error, message = nil, backtrace: caller) 
    exception = error.new(message) 
    exception.set_backtrace(backtrace) 
    exception 
    end 
end 

用途:

ErrorCreator.new(StandardError, "failed") 
ErrorCreator.new(StandardError, "failed", backtrace: caller) 

私は誰が使用する宝石を作成しました:https://github.com/JuanitoFatas/active_error

0

あなたはこのように、独自の例外を作成することができます

raise NameException.new(message, backtrace) 

あなたが適応できる

があなたのファイルにapp > exceptions > name_exception.rb

name_exception.rbその後

class NameException < StandardError 
    def initialize(message, backtrace) 
    super 
    backtrace 
    end 
end 

にファイルを作成します。それはあなたの必要に応じていますが、パターンはここにあります。

関連する問題