如何在python中捕获最终异常子句的消息?

时间:2011-06-21 22:40:24

标签: python exception-handling try-catch-finally

我知道如何捕获异常并打印他们返回的消息:

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 个答案:

答案 0 :(得分:4)

将始终评估finally块中的代码。检查catch块中出了什么问题

答案 1 :(得分:4)

根据documentation,你不能:

  

异常信息不是   可用于该计划期间   执行finally子句。

最好检查除外块。

答案 2 :(得分:2)

要抓住任何东西:

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

但这几乎总是错误的做法。如果你没有发生什么样的例外,那么你无能为力。如果发生这种情况,您的程序应该关闭并尽可能多地提供有关所发生情况的信息。

答案 3 :(得分: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"