ruby - 在 Ruby 中创建完整的异常对象

标签 ruby exception

我想要一个包含所有正常信息(消息、回溯等)的 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/

相关文章:

Ruby I/O - 文件句柄保持打开状态

javascript - 适用于不同语言的 Rails 富文本编辑器

css - Rails 中数字的 Excel 样式条件格式

c# - 如何在 wcf-service 中设置默认的 faultcontract 属性

java - try and catch 语句没有给我结果?

ruby-on-rails - 拯救 "undefined method ' xyz' 为 nil :nilClass"errors

ruby - 如何让自己的 def 类充当 ruby​​ 中的数组?

java - GWT开发模式错误

java - Jersey HTTP 服务器 : Add parameters to every http method

c++ - 有效取消引用空指针的规则是什么?