是否有在 Python 中使用异常链的标准方法?像“由”引起的 Java 异常?
这里有一些背景。
我有一个带有一个主要异常类的模块DSError
:
class DSError(Exception):
pass
在此模块中的某处将有:
try:
v = my_dict[k]
something(v)
except KeyError as e:
raise DSError("no key %s found for %s" % (k, self))
except ValueError as e:
raise DSError("Bad Value %s found for %s" % (v, self))
except DSError as e:
raise DSError("%s raised in %s" % (e, self))
基本上这个片段应该只抛出 DSError 并告诉我发生了什么以及为什么。问题是 try 块可能会引发许多其他异常,所以如果我能做类似的事情,我会更喜欢:
try:
v = my_dict[k]
something(v)
except Exception as e:
raise DSError(self, v, e) # Exception chained...
这是标准的pythonic方式吗?我没有在其他模块中看到异常链,那么在 Python 中是如何完成的呢?