2

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

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 回答 4

4

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

于 2011-06-21T22:42:10.207 回答
4

根据文档,您不能:

在 finally 子句执行期间,异常信息对程序不可用。

最好检查 except 块。

于 2011-06-21T22:45:10.040 回答
2

要捕捉任何东西,请使用:

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

但这几乎总是错误的做法。如果你不知道发生了什么样的异常,你就无能为力了。如果发生这种情况,您的程序应该关闭并提供尽可能多的关于发生的事情的信息。

于 2011-06-21T23:10:14.920 回答
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"
于 2013-07-10T10:04:48.060 回答