代码之家  ›  专栏  ›  技术社区  ›  ffConundrums

重新引发异常,在某种程度上与Python2和Python3无关[重复]

  •  1
  • ffConundrums  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我在python 3中有一个脚本,它使用'from'关键字重新引发了一个异常(如对这个stackoverflow问题的回答所示: Re-raise exception with a different type and message, preserving existing information )

    我现在必须返回并使脚本与Python2.7兼容。“from”关键字不能在Python2.7中以这种方式使用。我发现在python 2中,重新引发异常的方法如下:

    try:
        foo()
    except ZeroDivisionError as e:
        import sys
        raise MyCustomException, MyCustomException(e), sys.exc_info()[2]
    

    然而,虽然此语法在Python2.7中有效,但在Python3中无效。

    在python中是否有一种可接受的方法来重新引发对python 2.7和python 3都有效的异常?

    1 回复  |  直到 6 年前
        1
  •  2
  •   GP89    6 年前
    # 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)