【发布时间】:2015-06-06 15:18:03
【问题描述】:
我正在尝试改进嵌套异常的回溯。目前我有这个:
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,但插入并非易事,因为我必须在回溯中找到正确的位置。
因为这似乎是一个基本的常见需求:有没有更简单的方法来实现我想要做的所有事情?
【问题讨论】: