我遇到了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
答案 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中使用它。