Как поймать сообщение об окончательном исключении в python? - PullRequest
1 голос
/ 22 июня 2011

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

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

Ответы [ 4 ]

4 голосов
/ 22 июня 2011

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

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

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

4 голосов
/ 22 июня 2011

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

2 голосов
/ 22 июня 2011

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

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

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

1 голос
/ 10 июля 2013

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

    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"
...