2013-07-01 160 views
0

我有一個python異常微妙的問題。 我的軟件目前在多個平臺上運行,我仍然旨在與py2.5兼容,因爲它位於羣集中,其中更改版本將成爲主要工作。異常處理與多個python版本

其中一個(debian)系統最近從2.6更新到2.7,並且一些代碼塊會從底層C部分拋出奇怪的異常。然而,這是從來沒有這樣的情況下,我的mac 2.7 - >情況並非如此代碼中沒有錯誤,而是與新的庫之一。

我想如何管理2.7的異常,但不幸的是,異常處理與2.5不兼容。

有沒有辦法像「預處理器命令 - C風格?

if interpreter.version == 2.5: 
foo() 
elif interpreter.version == 2.7: 
bar() 

乾杯, 薩爾瓦多

舉例附:

try:                          
    foo() 
except RuntimeError , (errorNumber,errorString): 
    print 'a' 
    #ok with 2.5, 2.7 however throws exceptions 

try:                          
    foo() 
except RuntimeError as e: 
    print 'a' 
#ok with 2.7, 2.5 does not understand this 

回答

1

你可以寫兩個不同的嘗試...除了兩個不同的版本基本上是在兩個不同版本的錯誤匹配例外。

import sys 

if sys.version_info[:2] == (2, 7): 
    try: 
     pass 
    except: 
     # Use 2.7 compatible exception 
     pass 
elif sys.version_info[:2] == (2, 5): 
    try: 
     pass 
    except: 
     # Use 2.5 compatible exception 
     pass 
0

你可以寫你的異常處理程序與 Python版本,而不是兼容:

try:                          
    foo() 
except RuntimeError, e: 
    errorNumber, errorString = e.args 
    print 'a' 

演示:

>>> def foo(): 
...  raise RuntimeError('bar!') 
... 
>>> try: 
...  foo() 
... except RuntimeError, e: 
...  print e.args 
... 
('bar!',) 

有沒有必要做的Python版本檢測在這裏,除非你需要這個工具來跨越Python 2.5到2.7和Python 3.x。