Подтвердить что ты не робот

Как перекрыть исключение, содержащее информацию об исходном исключении?

Поэтому я в основном должен изолировать 2 слоя приложения друг от друга за исключением.

У меня есть этот WLST 12c script (python 2.2), который похож на

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

Я хотел бы иметь возможность повторно поднимать один из моих собственных типов исключений, содержащий сообщение о том, что вызвало предыдущее исключение (и нет, я не знаю, что a и b параметры есть, но я предполагаю, что один из них должен быть описанием исключения).

Я сам парень из java, поэтому я с нетерпением жду чего-то вроде

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

Ответ 1

Надеюсь, я правильно ответил.

Я не уверен в специфике Python 2.2, но this говорит, что вы можете обрабатывать исключения так же, как в более поздних версиях:

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

Или, может быть, последняя строка должна быть raise ExceptionToThrow(str(e)). Это зависит от того, как определяется ваше исключение. Пример:

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

Возникает ValueError('foo').

Надеюсь, это поможет:)

Ответ 2

Несмотря на то, что это старый пост, гораздо более простой ответ на исходный вопрос. Чтобы реконструировать исключение после его захвата, просто используйте "рейз" без аргументов. Исходная трассировка стека будет сохранена.

Ответ 3

class MyException(Exception): pass

...

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

Вы можете извлечь информацию из исходного исключения, которое здесь привязано к e, а затем передать это на свое собственное исключение, когда вы его поднимаете.