ruby - 从不同的地方重新提出 ruby 异常

标签 ruby exception

如何使最后一行从 bar 重新引发的异常看起来像是来自那里,而不是来自 block ?我想在回溯中看到 bar

begin
  raise "foo"
rescue => e # yeah, i know
  $e = e # oh boy, globals
end

sleep 1 # again, i know

def bar
  raise $e
end

bar # => test.rb:2:in `<main>': foo (RuntimeError)

编辑:

当前回溯是

test.rb:2:in `<main>': foo (RuntimeError)

我想要的是(或类似的东西)

test.rb:10:in `bar': foo (RuntimeError)
from test.rb:13:in `<main>'

最佳答案

我不确定这是否是你想要的,但你可以尝试:

begin
  raise "foo"
rescue => e
  $e = e
end

sleep 1 

def get_full_stack
  caller
end

def bar
  exception = $e.dup
  exception.set_backtrace get_full_stack   
  raise exception
end

关于ruby - 从不同的地方重新提出 ruby 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18834641/

相关文章:

ruby - Gemfile.lock 应该包含在 .gitignore 中吗?

java - 异常链在我的代码中如何工作?

java - System.console() 在 NetBeans 中给出 NullPointerException

javascript - vert-x 3.3.2 http客户端异常处理程序

java - 尝试捕获不被强制

mysql - SQL 查询中的语法错误。无法发现错误

ruby-on-rails - 在 Rails 中接收电子邮件的最佳实践

ruby-on-rails - 始终显示 Kaminari 的分页控件

ruby - 迭代串联数组会更改原始数组中的项目。为什么?

c# - entlib 6 记录器实例化错误