一些背景知识:我在大型代码库(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
中获救?
答案 0 :(得分:1)
我能想到的唯一方法(现在)是手动调试/检查。
如果您要提出该异常,则需要跟踪,检查当前caller
。这会给你一个调用堆栈。现在访问编辑器中的每一行/方法,寻找太贪心的救援。
更多"自动"方式,我什么都看不到。 Ruby异常没有on_rescue
回调或类似的东西,因此他们无法知道他们已被拯救。