让 Python 2.6 异常向后兼容

8
我有以下的Python代码:
 try:
      pr.update()
 except ConfigurationException as e:
      returnString=e.line+' '+e.errormsg

这在Python 2.6下有效,但“as e”语法在之前的版本中会失败。我该如何解决这个问题?换句话说,在Python 2.6下如何捕获用户定义的异常(并使用它们的实例变量)。谢谢!

4个回答

12

这是向后和向前兼容的:

import sys
try:
    pr.update()
except (ConfigurationException,):
    e = sys.exc_info()[1]
    returnString = "%s %s" % (e.line, e.errormsg)

这可以解决Python 2.5及以前版本中的歧义问题,同时不会失去Python 2.6/3多变性的任何优势,例如仍然可以无歧义地捕获多个异常类型,如except (ConfigurationException, AnotherExceptionType):并且如果需要按类型处理,仍然可以测试exc_info()[0]==AnotherExceptionType


9
这是向后兼容的:
try:
    pr.update()
except ConfigurationException, e:
    returnString=e.line+' '+e.errormsg

1
逗号语法在向后兼容方面肯定没问题,但它并不具备向前兼容性。在Python 3中这是无效的,并会引发语法错误。是的,这不是运行时错误,而是编译时错误,无法被捕获。请参见http://docs.python.org/library/sys.html#sys.exc_info和@Mario-Ruggier的下面的回答。 - Nathan

5

1
try:
    pr.update()
except ConfigurationException, e:
    returnString = e.line + " " + e.errormsg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接