Мне интересно, как я могу поймать любой поднятый объект (т.е. тип, который не расширяет 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 no reference to the exception that was raised
Я могу решить эту проблему, импортировав тип исключения Java и поймав его явно, но это затрудняет/невозможно писать общие обертки/обработчики обработки исключений.
Есть ли способ уловить какое-либо произвольное исключение и все еще получить ссылку на него в блоке except
?
Я должен отметить, что я надеюсь на обработчик обработки исключений, который я делаю для использования с проектами Python, а не только с проектами Jython. Я бы хотел избежать импорта java.lang.Exception
, потому что это просто делает Jython-only. Например, я полагаю, что могу сделать что-то вроде этого (но я его не пробовал), но я бы хотел избежать этого, если смогу.
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