2012-07-01 13 views
24

我想保留&在Python 2.5,2.7和3.2中都使用異常的錯誤值。try ... except ... as Python 2.5中的錯誤 - Python 3.x

在Python 2.5和2.7(但不3.x中),這個工程:

try: 
    print(10 * (1/0)) 
except ZeroDivisionError, error:  # old skool 
    print("Yep, error caught:", error) 

在Python 2.7和3.2(而不是2.5),這個工程:

try: 
    print(10 * (1/0)) 
except (ZeroDivisionError) as error: # 'as' is needed by Python 3 
    print("Yep, error caught:", error) 

是有什麼代碼可以在2.5,2.7和3.2下運行?

感謝

+0

你能不能升級2.5代碼至少2.7,最好是3? – Ben

+0

'除了(ZeroDivisionError)作爲錯誤:'在Python 2.7中工作正常http://ideone.com/KfHBs –

+2

Python 3明確不向後兼容。爲什麼只限於兩種語言支持的有限語法子集? – Cameron

回答

36

您可以通過3.2上使用蟒蛇2.5一個代碼庫,但它是不容易的。你可以看看coverage.py,它運行在2.3到3.3之間,只有一個代碼庫。

捕捉異常,並獲得在所有這些工作的異常的引用的方式是這樣的:

except ValueError: 
    _, err, _ = sys.exc_info() 
    #.. use err... 

這相當於:

except ValueError as err: 
    #.. use err... 
+0

工作!謝謝! – user1492917

+1

授予它的作品,但也許治癒比問題更糟糕(醜陋)。另一種方法是在打包代碼爲2.5時使用「as」和代碼轉換腳本。因人而異。 –

+0

問題是python在版本之間的語法上做了重大且不必要的更改。想象一下C:從版本x.y中你使用「@」而不是「{」:)這簡直是愚蠢的,治療效果要好得多 - 畢竟我們都希望它能夠工作! – Terminus