如何确定Ruby中拯救异常的位置?

时间:2017-06-29 09:16:19

标签: ruby-on-rails ruby exception-handling

一些背景知识:我在大型代码库(Rails)中有一些Ruby代码,在某些条件下会引发异常。然而,异常不会像预期的那样“发生”,它会被默默地丢弃。我假设其他一些代码(宝石)可能会意外地拯救异常。

如何确定 该豁免的例外?

我完全可以控制异常。那么也许有一种方法可以让异常知道什么时候或者什么时候被救出?

受挫的例子:

# code outside my control
def foo
  yield
rescue
end

def black_box(&block)
  foo(&block)
end
# my code
black_box do
  puts 'about to raise'
  raise
  puts 'never gets here'
end

输出:

about to raise

因此获得了例外。如何识别(在“我的代码”中)它是否在foo中获救?

1 个答案:

答案 0 :(得分:1)

我能想到的唯一方法(现在)是手动调试/检查。

如果您要提出该异常,则需要跟踪,检查当前caller。这会给你一个调用堆栈。现在访问编辑器中的每一行/方法,寻找太贪心的救援。

更多"自动"方式,我什么都看不到。 Ruby异常没有on_rescue回调或类似的东西,因此他们无法知道他们已被拯救。