Я знаю, как поймать исключения и распечатать сообщение, которое они вернули:
class SelfDefinedException(Exception): pass
try:
message = "Hello World!"
raise SelfDefinedException(message)
except MyDefinedException, e:
print "MyDefinedException", e
Пока это хорошо.
Но как я могу поймать и распечатать сообщение в разделе "finally"?
class SelfDefinedException(Exception): pass
try:
message = "Hello World!"
raise SelfDefinedException(message)
except MyDefinedException, e:
print "MyDefinedException", e
finally:
# What goes here? So I can see what went wrong?
Из нескольких ответов я понимаю, что это невозможно. Можно ли что-то сделать?
class SelfDefinedException(Exception): pass
try:
message = "Hello World!"
raise SelfDefinedException(message)
except MyDefinedException, e:
print "MyDefinedException", e
except Exception, e:
# Hopefully catches all messages except for the one of MyDefinedException
print "Unexpected Exception raised:", e
код в блоке finally всегда будет оцениваться. проверьте, что пошло не так в блоке catch
finally
перехватывается любое исключение, кроме SelfDefinedException
. Но как мне визуализировать в блоке finally` Сообщение и тип исключения, возникающего в блоке try
?
finally
не охватывает никаких исключений. Это всегда выполняется даже в удачном случае
Согласно документации, вы не можете:
Информация об исключении недоступна программе во время выполнения предложения finally.
Лучше всего проверить за исключением блока.
Чтобы поймать что-нибудь вообще, используйте:
try:
foo()
except:
print sys.exc_info()
raise
Но это почти всегда неправильно. Если вы не знаете, какое исключение произошло, вы ничего не можете с этим поделать. Если это произойдет, ваша программа должна закрыть и предоставить как можно больше информации о том, что произошло.
Мне нужна была аналогичная вещь, но в моем случае всегда очищать некоторые ресурсы, когда не было исключений. Приведенный ниже пример решения работал для меня и должен также ответить на вопрос.
caught_exception=None
try:
x = 10/0
#return my_function()
except Exception as e:
caught_exception = e
finally:
if caught_exception:
#Do stuff when exception
raise # re-raise exception
print "No exception"
#Do stuff when exception
в except
, и print "No exception"
в else