Python2“在一个文件中提升e [0],e [1],e [2]”和python3版本

时间:2014-01-19 17:42:06

标签: python python-3.x

我发现python 3相当于:

raise e[0], e[1], e[2]

看起来像这样:

raise e[0](e[1]).with_traceback(e[2])

但我得到第1个语法错误(在python 3中)或object has no attribute 'with_traceback'(在python 2中)

如何为这两个版本编写这些行而没有错误?

2 个答案:

答案 0 :(得分:1)

似乎six.reraise就像你所追求的那样。

使用在py2和py3中都有效的不同回溯引发异常的示例:

from __future__ import print_function
import sys
import six


def this_should_show_up_in_the_traceback():
    raise ValueError("an exception")

try:
    this_should_show_up_in_the_traceback()
except:
    type, value, tb = sys.exc_info()

print('stashed a traceback for later', type, value, tb)

six.reraise(IndexError, IndexError("other exception"), tb)

答案 1 :(得分:1)

根据兼容性问题

部分中的PEP 3109 -- Raising Exceptions in Python 3000
  

三个表达式加注语句将从

转换而来
raise E, V, T
     

e = E(V)
e.__traceback__ = T
raise e

在你的例子中

ex = e[0](e[1])
ex.__traceback__ = e[2]
raise ex