Pregunta ¿Cómo relanto una excepción que contiene información sobre una excepción original?


Así que básicamente tengo que aislar 2 capas de la aplicación entre sí por excepciones.

Tengo este script WLST 12c (python 2.2), que va como

try:
    something something...
except java.lang.UnsuportedOpperationException, (a, b):
    pass
except java.lang.reflect.UndeclaredThrowableException, (a, b):
    pass

Me gustaría poder volver a plantear uno de mis propios tipos de excepción, que contiene un mensaje sobre lo que causó la excepción anterior (y no, no sé qué a y b los parámetros son, pero supongo que uno de ellos debe ser la descripción de la excepción).

Soy un chico de Java, así que espero algo así como

try {
    something something...
} catch (Exception e) {
    throw new RuntimeException(e, "something horrible happened");
}

13
2018-05-11 17:04


origen


Respuestas:


Espero tener la pregunta correcta.

No estoy seguro de las especificaciones de Python 2.2, pero esta dice que puedes manejar las excepciones de la misma manera que en las versiones más recientes:

try:
    do_stuff()
except ErrorToCatch, e:
    raise ExceptionToThrow(e)

O tal vez la última línea debería ser raise ExceptionToThrow(str(e)). Eso depende de cómo esté definida su excepción. Ejemplo:

try:
    raise TypeError('foo')
except TypeError, t:
    raise ValueError(t)

Esto aumenta ValueError('foo').

Espero eso ayude :)


9
2018-05-11 17:17



Aunque esta es una publicación anterior, hay una respuesta mucho más simple a la pregunta original. Para volver a lanzar una excepción después de atraparla, simplemente use "raise" sin argumentos. La traza original de la pila se conservará.


29
2018-06-03 21:03



class MyException(Exception): pass

...

try:
    my_funcion(my_args)
except (IOError, KeyError, some_list_of_other_possible_exceptions), e:
    raise MyException("Uh oh")

Puede extraer información de la excepción original, que aquí está vinculada a e, y luego pasarla a su propia excepción cuando la suba.


0
2018-05-11 17:21