如何使用消息和回溯手动创建异常

Jua*_*tas 9 ruby exception

如何使用backtrace创建例外?

我知道我们可以做这样的事情来实现这个目标:

begin
  raise StandardError, "message"
rescue StandardError => exception
  exception.backtrace
end
Run Code Online (Sandbox Code Playgroud)

要么

exception = StandardError.new("message")
exception.set_backtrace(caller)
Run Code Online (Sandbox Code Playgroud)

但我正在寻找这样的事情:

exception = StandardError.new("message", backtrace: caller)
Run Code Online (Sandbox Code Playgroud)

有没有办法可以使用自定义消息和回溯来初始化异常?

提前致谢!!!

saw*_*awa 13

您无法使用回溯初始化异常,但您可以在初始化后立即分配一个异常.

exception = StandardError.new("message")
exception.set_backtrace(caller)
Run Code Online (Sandbox Code Playgroud)


Jua*_*tas 6

自己封装一个函数类:

class ErrorCreator
  def self.new(error, message = nil, backtrace: caller)
    exception = error.new(message)
    exception.set_backtrace(backtrace)
    exception
  end
end
Run Code Online (Sandbox Code Playgroud)

使用:

ErrorCreator.new(StandardError, "failed")
ErrorCreator.new(StandardError, "failed", backtrace: caller)
Run Code Online (Sandbox Code Playgroud)

我创建了一个 gem 供任何人使用: https: //github.com/JuanitoFatas/active_error