2015-09-25 48 views
0

如果我有一个功能foo_1,它调用foo_2,并且foo_2可以引发我想要在foo_1中处理的异常。我怎样才能做到这一点?如何在Ruby中的堆栈中引发异常?

我想写这样的事情,所以我只需要对付一个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

如果堆栈帧没有抛出的异常,它会自动传播到下一个堆栈帧,直到它被处理或到达堆栈的底部(此时Ruby解释器通过打印处理它它和你的程序终止)。您无需执行任何操作即可启用此行为。

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" 
+0

嗯......我一定在做别的事情,因为我似乎没有看到这种行为。让我玩弄更多 – RocketGuy3

+0

是的,我只是在愚蠢......正试图捕捉异常的功能错误。我早该知道。但是,谢谢。如果你没有直接告诉我这是它应该如何工作的话,可能会再挣扎一会儿。 – RocketGuy3