我如何将此代码移植到 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/