2011-06-09 4 views
11

Me gustaría saber si es posible en python generar una excepción en un bloque excepto y atraparlo en un bloque posterior excepto. Creo que algunos otros idiomas hacen esto por defecto.excepción Python de reubicación/reincidencia

Esto es lo que se vería como"

try: 
    something 
except SpecificError as ex: 
    if str(ex) = "some error I am expecting" 
     print "close softly" 
    else: 
     raise 
except Exception as ex: 
    print "did not close softly" 
    raise 

Quiero que el aumento en la cláusula más para desencadenar la final, excepto comunicado.

En realidad yo no estoy imprimiendo otra cosa que registrarlo y yo Quiero registrar más en el caso de que es el mensaje de error que no estoy esperando. Sin embargo, este registro adicional se incluirá en el final excepto.

Creo que una solución sería hacer una función si no se cierra suavemente, que se llama en el final excepto y en la cláusula else. Pero eso parece innecesario.

Respuesta

16

Se invoca una sola cláusula except en un bloque try. Si desea que la excepción se capture más arriba, deberá usar bloques anidados try.

17

¿Qué pasa con la escritura 2 bloques try ... except como este:

try: 
    try: 
     something 
    except SpecificError as ex: 
     if str(ex) == "some error I am expecting" 
      print "close softly" 
     else: 
      raise ex 
except Exception as ex: 
    print "did not close softly" 
    raise ex 
+5

Para Python después de 2.6 esto debe ser 'excepto SpecificError como ex:' Ver http://stackoverflow.com/questions/2535760/python-try-except-comma-vs-as-in-except para coma en lugar de como . – hum3

1

Según pitón tutorial hay una y sólo una excepción atrapada por una sentencia try. Puede encontrar un ejemplo bastante simple en el tutorial que también le mostrará cómo usar correctamente el formato de error.

De todos modos, ¿por qué realmente necesitas el segundo? ¿Podrías dar más detalles sobre esto?

Cuestiones relacionadas