2015-04-01 161 views
1

我想改善嵌套異常的回溯。目前,我有這樣的:追溯嵌套異常

def upsert(doc) 
    get(doc.id) ? update(doc) : insert(doc) 
rescue => ex 
    raise RepositoryError, "#{ex.class}: #{ex.message}" 
end 

在我UPSERT方法我想換任何異常到一個通用的一個。該解決方案的工作,但有一個惱人的副作用:對實際問題的回溯丟失(獲救除外)

我可能會進一步解決這個問題用一個從內部異常替換回溯:

raise RepositoryError, "#{ex.class}: #{ex.message}", ex.backtrace 

這顯示了具有真正問題的回溯,但排除了生產線RepositoryError。我可能會使用__FILE__:__LINE__來擴展ex.backtrace,但插入並不重要,因爲我必須在回溯內找到正確的位置。

因爲這似乎是一個基本的共同需求:有沒有一種更簡單的方法來實現我想要做的一切?

回答

0

我正在尋找嵌套異常的Java等價物。到目前爲止,似乎Nesty是要走的路。 I see that Charles Nutter requested #cause被添加到MRI,並且有東西,但它不顯示。

class HappyError < StandardError 
    include Nesty::NestedError 
end 


begin 
    raise 'foo' 
rescue => e 
    raise HappyError.new 
end 

看起來很簡單(注意,這隱含巢原因是通過$訪問!)

相關問題