【发布时间】:2015-02-03 18:24:36
【问题描述】:
Python 3 很简洁
try:
raise OneException('sorry')
except OneException as e:
# after a failed attempt of mitigation:
raise AnotherException('I give up') from e
允许在不丢失上下文的情况下引发后续异常的语法。在 Python 2 中我能想到的最好的类比是
raise AnotherException((e,'I give up')), None, sys.exc_info()[2]
(e,'') 是一个丑陋的黑客,将原始异常的名称包含在消息中。但是没有更好的方法吗?
【问题讨论】:
-
您可以只使用
raise而不使用任何参数,但如果您这样做,我认为您不能将类型更改为AnotherException。 -
@Kevin 我知道,这只是一个简化 - 在更现实的情况下,这就像一个文件未找到异常并且它的故障保护也失败了,因此产生了一个不同的异常以及其他一些消息好吧,但应该保留原来的异常
-
我认为 Python 2 没有为这样的事情提供适当的支持。我想你可以用
reraise()函数或其他东西来包装你丑陋的黑客。鉴于release schedule for 2.8,您可能会考虑切换到 3.x。您有任何仅 2.x 的依赖项吗? -
@Kevin hg.python.org/peps/rev/… :P 目前我使用 Python 2.7 的主要原因是 PythonXY (Windows),但我也是出于好奇而询问
标签: python-2.7 exception python-3.x traceback raise