Мне интересно, как я могу поймать любой поднятый объект (т. Е. Тип, который не расширяется Exception
), и все еще получать ссылку на него.
Я натолкнулся на желание сделать это при использовании Jython. При вызове метода Java, если этот метод вызывает исключение, он не будет расширять класс Exception
Python, поэтому такой блок не будет его перехватывать:
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