我發現蟒蛇3當量:Python2 「提高E [0],E [1],E [2]」 和python3版本在一個文件中
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)
如何寫這幾行兩個版本沒有錯誤?
我發現蟒蛇3當量:Python2 「提高E [0],E [1],E [2]」 和python3版本在一個文件中
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)
如何寫這幾行兩個版本沒有錯誤?
看起來像six.reraise
是你所追求的。
例子:
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)
根據部分兼容性問題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
@pxl:但是其他的語法仍然會在Python 3拋出一個語法錯誤.. –
有@MartijnPieters同意。我試過的第一件事是'如果six.PY3:... else:...'。但是我有一個語法錯誤 – Sergey