2009-09-03 11 views
8

tengo el siguiente código Python:toma de Python 2.6 excepción compatible

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

Esto funciona bajo el pitón 2.6, pero la sintaxis "como e" produce un error en las versiones anteriores. ¿Cómo puedo resolver esto? O, en otras palabras, ¿cómo atrapo las excepciones definidas por el usuario (y uso sus variables de instancia) en python 2.6? ¡Gracias!

Respuesta

9

Esto es compatible con versiones anteriores:

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

Consulte PEP 3110 para saber por qué esto cambió: http://www.python.org/dev/peps/pep-3110/ – Greg

+1

La sintaxis es ciertamente retrocompatible, pero tampoco es _forward_ compatible. Esto no es válido en Python 3 y genera un error de sintaxis. Sí, no es un error de tiempo de ejecución, sino un error de tiempo de compilación que no se puede capturar. Consulte http://docs.python.org/library/sys.html#sys.exc_info y la respuesta de @ Mario-Ruggier a continuación. – Nathan

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

Esto es a la vez hacia atrás y adelante compatibles:

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

Esto se deshace de la problema de ambigüedad en Python 2.5 y anteriores, mientras que aún no pierde ninguna de las ventajas de la variación de python 2.6/3, es decir, todavía puede capturar de manera inequívoca múltiples tipos de excepciones, por ejemplo except (ConfigurationException, AnotherExceptionType): y, si se necesita manejo por tipo, aún puede realizar la prueba de exc_info()[0]==AnotherExceptionType.