我有以下python代码:
try:
pr.update()
except ConfigurationException as e:
returnString=e.line+' '+e.errormsg
这在python 2.6下工作,但“as e”语法在以前的版本中失败。我怎么解决这个问题?或者换句话说,如何在python 2.6下捕获用户定义的异常(并使用它们的实例变量)。谢谢!
答案 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