2012-10-01 50 views
11

有沒有辦法編寫一個從python 2.4到python 3兼容的異常捕獲代碼?如何編寫一個異常捕獲代碼在Python2.4中工作到Python3

這樣的代碼:

# only works in python 2.4 to 2.7 
try: 
    pass 
except Exception,e: 
    print(e) 

# only works in python 2.6 to 3.3 
try: 
    pass 
except Exception as e: 
    print(e) 
+1

很多項目維護他們的Python 2代碼,並使用[2to3的(HTTP ://docs.python.org/library/2to3.html)根據需要自動將其轉換爲python 3。這通常比試圖編寫與兩者兼容的代碼更容易(這可能不會是你遇到的最困難的問題)。 – James

回答

15

嘗試寫在兩個Python的2工作和Python 3最終是徒勞相當,因爲它們之間的差異數量之多的代碼。事實上,現在很多項目都在單獨的Python 2和Python 3版本中進行維護。

這就是說,如果你一意孤行,在超便攜的方式做這個...

import sys 
try: 
    ... 
except Exception: 
    t, e = sys.exc_info()[:2] 
    print(e) 
+2

雖然這不會是線程安全的 –

+0

謝謝nneonneo您的答案,並感謝您@gnibbler您的提示:-) – yegle

+4

@gnibbler:我相信這是...「返回的信息是具體的當前線程和當前的堆棧幀「。 – nneonneo