Как поймать сообщение об окончательном исключении в python?

1

Я знаю, как поймать исключения и распечатать сообщение, которое они вернули:

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
  • 0
    Почему ты хочешь? Не достаточно ли исключающее положение?
  • 0
    @Winston Уинстон, я реализовал обработку своих собственных Исключений, которые я поднимаю, но я хочу быть в курсе, если возникло какое-то другое исключение, которого я не ожидал. Смотрите мое редактирование.
Показать ещё 1 комментарий
Теги:
exception-handling
try-catch-finally

4 ответа

4
Лучший ответ

код в блоке finally всегда будет оцениваться. проверьте, что пошло не так в блоке catch

  • 0
    Я понимаю, что в моем примере, finally перехватывается любое исключение, кроме SelfDefinedException . Но как мне визуализировать в блоке finally` Сообщение и тип исключения, возникающего в блоке try ?
  • 2
    @Druss, предложение finally не охватывает никаких исключений. Это всегда выполняется даже в удачном случае
4

Согласно документации, вы не можете:

Информация об исключении недоступна программе во время выполнения предложения finally.

Лучше всего проверить за исключением блока.

2

Чтобы поймать что-нибудь вообще, используйте:

try:
    foo()
except:
    print sys.exc_info()
    raise

Но это почти всегда неправильно. Если вы не знаете, какое исключение произошло, вы ничего не можете с этим поделать. Если это произойдет, ваша программа должна закрыть и предоставить как можно больше информации о том, что произошло.

1

Мне нужна была аналогичная вещь, но в моем случае всегда очищать некоторые ресурсы, когда не было исключений. Приведенный ниже пример решения работал для меня и должен также ответить на вопрос.

    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"
  • 0
    Вам лучше переместить # #Do stuff when exception в except , и print "No exception" в else
  • 0
    @GingerPlusPlus Я понимаю вашу точку зрения, но конструкция отвечает на вопрос "Но как я могу перехватить и напечатать сообщение в предложении" finally "?"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню