我想要一个包含所有正常信息(消息、回溯等)的 Exception 对象的引用。
Exception 有一个新
方法,但它不填充回溯:
exception = Exception.new("my message")
exception.backtrace
#=> nil
文档说有一个 set_backtrace方法,但您必须自己提供回溯(它不只是使用当前堆栈)。
我可以通过抚养和拯救来解决这个问题:
exception = begin
raise Exception, "my message"
rescue Exception => e
e
end
exception.backtrace
#=> ["(irb):4:in 'irb_binding'", ...]
但是感觉不是很干净。
有没有简单的方法来创建一个完全填充的异常对象?
最佳答案
当前堆栈跟踪可以从Kernel#caller
获得,所以你可以这样做
exception = Exception.new("my message")
exception.set_backtrace(caller)
我想创建一个 Exception
对象而不立即引发它基本上只有在您计划传递它时才有意义。因此,必须手动设置回溯是有道理的。
关于ruby - 在 Ruby 中创建完整的异常对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22080733/