如何在Ruby中向堆栈中引发异常?

时间:2015-09-25 23:00:42

标签: ruby exception exception-handling

如果我有一个调用foo_1的函数foo_2foo_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传递例外?

1 个答案:

答案 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"