如果我有一个调用foo_1
的函数foo_2
,foo_2
可能会引发我要在foo_1
中处理的异常。我怎么能这样做?
我想写这样的内容,这样我只需要处理一个begin
/ rescue
块:
def foo_1
begin
foo_2
rescue SomeException
# Do stuff
end
end
def foo_2
# Do stuff that can throw SomeException
end
如何从foo_2
传递例外?
答案 0 :(得分:1)
如果堆栈帧不是抛出异常,那么它将自动向下传播到下一个堆栈帧,直到它被处理或者到达堆栈的底部(此时Ruby解释器通过打印它来处理它) out和你的程序终止)。您无需执行任何操作即可启用此行为。
class SomeException < StandardError; end
def foo_1
begin
foo_2
rescue SomeException => e
"Rescued #{e.message} in foo_1"
end
end
def foo_2
foo_3
end
def foo_3
raise SomeException.new("kaboom!")
end
# > foo_1
# => "Rescued kaboom! in foo_1"