我想重新提出一個異常,讓用戶更好地瞭解有關實際錯誤的信息。 Python 3.3包括PEP 409。它添加了raise NewException from None
語法來抑制原始異常的上下文。我如何在Python 3.2程序中優雅地將Python 3.3從無例外語法中包含進來?
但是,我的目標是Python 3.2。 Python腳本將解析,但在運行時如果遇到from None
語法,它將產生TypeError: exception causes must derive from BaseException
。例如:
try:
regex_c = re.compile('^{}$'.format(regex))
except re.error as e:
e_msg = 'Regular expression error in "{}"'.format(regex)
e_reraise = Exception(e_msg)
# Makes use of the new Python 3.3 exception syntax [from None]
# to suppress the context of the original exception
# Causes an additional TypeError exception in Python 3.2
raise e_reraise from None
封裝在一個try
raise e_reraise from None
只是產生甚至更大的異常堆棧跟蹤。版本檢查也不起作用,因爲我在Xubuntu 12.10上的python3.3
從/usr/lib/python3/dist-packages/*
中獲取模塊,這是爲python3.2模塊設置的。 (你得到一個方便Error in sys.excepthook:
它創建了一個龐大的回溯)
有沒有在Python 3.3運行時,而在Python 3.2靜靜地忽略它使用PEP 409功能的方法嗎?
版本檢查有什麼問題? – wRAR 2013-02-27 21:55:53
@wRAR版本檢查似乎不適用於像我的系統,它有python3.3解釋器,但使用一個通用的python3 stdlib來設置不同的版本(在我的情況下是python3.2)。 – 2013-02-27 21:57:58
@SumantManne:你覺得'import sys; print(sys.version_info)'在那種情況下給你? – 2013-02-27 22:00:40