2009-09-03 33 views
8

我有以下Python代碼:製作蟒蛇2.6例外向後兼容

try: 
     pr.update() 
except ConfigurationException as e: 
     returnString=e.line+' '+e.errormsg 

這工作的python 2.6,但以前的版本下的「爲e」語法失敗。我該如何解決這個問題?換句話說,我如何在python 2.6下捕獲用戶定義的異常(並使用它們的實例變量)。謝謝!

回答

9

這是向後兼容:

try: 
    pr.update() 
except ConfigurationException, e: 
    returnString=e.line+' '+e.errormsg 
+2

有關更改的原因,請參閱PEP 3110:http://www.python.org/dev/peps/pep-3110/ – Greg 2009-09-03 13:00:59

+1

該語法當然是向後兼容的,但它也不是_forward_兼容的。這在Python 3中是無效的,並引發語法錯誤。是的,這不是一個運行時錯誤,而是一個無法捕獲的編譯時錯誤。請參閱下面的http://docs.python.org/library/sys.html#sys.exc_info和@ Mario-Ruggier的答案 – Nathan 2012-04-25 19:46:38

1
try: 
    pr.update() 
except ConfigurationException, e: 
    returnString = e.line + " " + e.errormsg 
12

這是向前後兼容:

import sys 
try: 
    pr.update() 
except (ConfigurationException,): 
    e = sys.exc_info()[1] 
    returnString = "%s %s" % (e.line, e.errormsg) 

該出手的python 2.5及更早版本中的歧義問題,同時仍然沒有失去python 2.6/3版本的任何優勢,即仍然可以毫不含糊地捕獲多個異常類型,例如except (ConfigurationException, AnotherExceptionType):,如果需要每種類型的處理,仍然可以測試exc_info()[0]==AnotherExceptionType