Re-raising exception, in a way agnostic to Python 2 and Python 3
本问题已经有最佳答案,请猛点这里访问。
我在Python 3中有一个脚本,它使用'from'关键字重新引发异常(如此Stackoverflow问题的答案中所示:使用不同的类型和消息重新引发异常,保留现有信息)
我现在必须返回并使脚本与Python 2.7兼容。 'from'关键字不能在Python 2.7中以这种方式使用。 我发现在Python 2中,重新引发异常的方法如下:
1 2 3 4 5 | try: foo() except ZeroDivisionError as e: import sys raise MyCustomException, MyCustomException(e), sys.exc_info()[2] |
但是,虽然此语法在Python 2.7中有效,但它不适用于Python 3。
是否有一种可接受的方法可以在Python中重新引发适用于Python 2.7和Python 3的异常?
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Python 3 only try: frobnicate() except KeyError as exc: raise ValueError("Bad grape") from exc # Python 2 and 3: from future.utils import raise_from try: frobnicate() except KeyError as exc: raise_from(ValueError("Bad grape"), exc) |