在 Python 中有使用异常链的标准方法吗? 比如 Java 异常“ cause d by”?
这是一些背景资料。
我有一个带有一个主要异常类 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...
这是标准的蟒蛇方式吗?我在其他模块中没有看到异常链,那么在 Python 中是如何做到的呢?