2015-04-01 118 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 

看起来很简单(注意,这隐含巢原因是通过$访问!)

相关问题