2015-09-25 50 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