Как поймать исключение в Python и получить ссылку на исключение, не зная тип?

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

Я столкнулся с требованием сделать это при использовании Jython. При вызове метода Java, если тот метод повышает исключение, он не расширит Python Exception класс, таким образом, блок как это не поймает его:

try:
    # some call to a java lib that raises an exception here
except Exception, e:
    # will never be entered

Я могу сделать это, но тогда у меня нет доступа к объекту исключения, который был повышен.

try:
    # some call to a java lib that raises an exception here
except:
    # will enter here, but there's no reference to the exception that was raised

Я могу решить это путем импорта типа исключительной ситуации Java и ловли его явно, но это делает трудным/невозможным записать универсальные обертки/декораторов обработки исключений.

Есть ли способ поймать некоторое произвольное исключение и все еще получить ссылку на него в except блок?

Я должен отметить, что надеюсь на декоратора обработки исключений, которого я делаю, чтобы быть применимым с проектами Python, не только с проектами Jython. Я хотел бы постараться не импортировать java.lang.Exception потому что это просто делает его Jython-только. Например, я полагаю, что могу сделать что-то вроде этого (но я не попробовал его), но я хотел бы избежать его, если я могу.

try:
    # some function that may be running jython and may raise a java exception
except (Exception, java.lang.Exception), e:
    # I imagine this would work, but it makes the code jython-only
20
задан TM. 11 January 2010 в 23:58
поделиться

1 ответ

Можно ссылаться на исключения с помощью модуля sys . sys.exc _ info - кортеж типа, экземпляра и отслеживания.

import sys

try:
    # some call to a java lib that raises an exception here
except:
    instance = sys.exc_info()[1]
36
ответ дан 29 November 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: