2012-07-01 12 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