使python 2.6异常向后兼容

时间:2009-09-03 12:55:16

标签: python exception syntax python-2.x

我有以下python代码:

 try:
      pr.update()
 except ConfigurationException as e:
      returnString=e.line+' '+e.errormsg

这在python 2.6下工作,但“as e”语法在以前的版本中失败。我怎么解决这个问题?或者换句话说,如何在python 2.6下捕获用户定义的异常(并使用它们的实例变量)。谢谢!

4 个答案:

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

答案 1 :(得分:9)

这是向后兼容的:

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

答案 2 :(得分:5)

阅读本文:http://docs.python.org/reference/compound_stmts.html#the-try-statement

并且:http://docs.python.org/whatsnew/2.6.html#pep-3110-exception-handling-changes

请勿使用as,请使用,

as语法特别不向后兼容,因为,语法含糊不清,必须在Python 3中消失。

答案 3 :(得分:1)

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