【问题标题】:Python everything in try blockPython try 块中的所有内容
【发布时间】:2011-11-08 01:02:59
【问题描述】:

我正在用 Python 写一个大批量类型的脚本,不管是否发生异常,最后都需要做一些清理工作。为此,我只需将主程序放在 try 块中,将清理放在 finally 块中。

这似乎运作良好,但我的问题是如何打印可能发生的任何异常。目前它只是忽略它们并跳转到 finally 块。

【问题讨论】:

  • 显示您的代码示例。仅供参考,您必须嵌套这些块。

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


【解决方案1】:

您应该能够使用try/finally 块而没有异常处理程序。它不会捕获异常或抑制回溯,只需确保无论是否存在异常都运行您的清理代码。这就是finally 的全部意义所在。

这是一个例子:

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> try:
...     print 'begin try'
...     assert False
...     print 'end try'
... finally:
...     print 'finally'
... 
begin try
finally
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
AssertionError

【讨论】:

  • 这对大多数事情都有意义,但在我的程序中,我需要在 finally 块之前捕获并打印错误。
  • 啊,那是一个不同的问题。当未捕获的异常终止进程时,会发生自动回溯打印。所以你需要的是“我如何打印我捕获的异常的回溯?”。 finally 与此完全无关。
【解决方案2】:

你可以使用回溯。

类似:

import traceback
try:
    foo
except:
    print(traceback.format_exc())
finally:
     cleanup

【讨论】:

  • 谢谢,这就是我要找的。​​span>
  • 为什么比try: foo finally: cleanup更好?
猜你喜欢
  • 2013-07-31
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多