追溯嵌套异常
问题描述:
我想改善嵌套异常的回溯。目前,我有这样的:追溯嵌套异常
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
,但插入并不重要,因为我必须在回溯内找到正确的位置。
因为这似乎是一个基本的共同需求:有没有一种更简单的方法来实现我想要做的一切?
答
我正在寻找嵌套异常的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
看起来很简单(注意,这隐含巢原因是通过$访问!)