python - 以与 Python 2 和 Python 3 无关的方式重新引发异常

标签 python python-3.x python-2.7

我有一个 Python 3 脚本,它使用“from”关键字重新引发异常(如 Stackoverflow 问题的答案所示: Re-raise exception with a different type and message, preserving existing information )

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

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?

最佳答案

# 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)

关于python - 以与 Python 2 和 Python 3 无关的方式重新引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51144708/

相关文章:

python - 电子邮件附件保存

python - python 中单个对象的列表理解

python - 在pyqtgraph中实现实时绘图最简单的方法是什么

Python SqlAlchemy 实用生成表类

python - 连接中止 .', BadStatusLine("''",) 在服务器上?

python - 显示图形限制之外的文本

python-3.x - --reload 标志不应在 Windows 的生产中使用。 Uvicorn 服务器警告

django - 如何使用 Sendgrid 从 Heroku 中部署的 Django 应用程序发送重置密码电子邮件?

python - 如何从cgi脚本获取python os.environ参数?

Zope 中的 Python 脚本无法在外部方法中找到函数名称