多个python版本的异常处理

时间:2013-07-01 19:14:10

标签: python swing python-2.7 python-2.5

我遇到了python异常的微妙问题。 我的软件目前在多个平台上运行,我仍然希望与py2.5兼容,因为它位于一个集群中,不断变化的版本将成为主要工作。

其中一个(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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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中使用它。