python - Python 2.x 和 3.x 中用于引发异常的有效语法?

标签 python python-3.x exception python-2.x

我如何将此代码移植到 Python 3,以便它可以在 Python 2 和 Python3 中运行?

raise BarException, BarException(e), sys.exc_info()[2]

(从 http://blog.ionelmc.ro/2014/08/03/the-most-underrated-feature-in-python-3/ 复制)

奖励问题
做类似的事情是否有意义

IS_PYTHON2 = sys.version_info < (3, 0)

if IS_PYTHON2:
    raise BarException, BarException(e), sys.exc_info()[2]
    # replace with the code that would run in Python 2 and Python 3 respectively
else:
    raise BarException("Bar is closed on Christmas")

最佳答案

您将不得不求助于 exec(),因为您不能在 Python 3 中使用 3 参数语法;它会引发语法错误。

一如既往six library你已经覆盖了,移植到不依赖于其他 六个 定义,它们的版本如下所示:

import sys

if sys.version_info[0] == 3:
    def reraise(tp, value, tb=None):
        if value is None:
            value = tp()
        if value.__traceback__ is not tb:
            raise value.with_traceback(tb)
        raise value

else:    
    exec("def reraise(tp, value, tb=None):\n    raise tp, value, tb\n")

现在您可以使用:

reraise(BarException, BarException(e), sys.exc_info()[2])

无需进一步测试 Python 版本。

关于python - Python 2.x 和 3.x 中用于引发异常的有效语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34463087/

相关文章:

python - 如何将 Pandas 数据框中的边框添加到 html 表格行标题?

python - 在 Python 中从数据点中查找移动平均值

python - 如何修复ModuleNotFoundError : No module named 'pip._internal' with python source code installation

python - jinja2.exceptions.UndefinedError - 没有属性 'favicon.ico'

python - 向服务器 pyzmq 发送数据时出现问题

Kotlin:尝试,捕捉,并且只有在最后出现错误时

java - 获取 java.lang.RuntimeException : java. util.concurrent.TimeoutException

Silverlight 验证消息位置

python - multiprocessing.Pool 在关闭/加入后无限期挂起

python - 运算符结果的 Numpy 总和,无需分配不必要的数组