【问题标题】:python try-finallypython try-finally
【发布时间】:2012-01-24 09:09:33
【问题描述】:

为什么foo 中的异常被忽略了,而bar 中的异常却被引发了?

def foo():
    try:
        raise Exception('foo')
    finally:
        return

def bar():
    try:
        raise Exception('bar')
    finally:
        pass

foo()
bar()

【问题讨论】:

标签: python exception try-catch finally


【解决方案1】:

来自Python documentation

如果 finally 子句引发另一个异常或执行 return 或 break 语句,则保存的异常将丢失。

【讨论】:

  • 有趣!如果这个问题有道理,它会“去”哪里?
  • @wim:我想它会出现在函数末尾的局部变量中。一种看待它的方法是在finally 块的末尾重新引发异常。由于return 跳过了finally 块的其余部分,因此永远不会重新引发异常。
猜你喜欢
  • 2018-03-19
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 2019-02-28
  • 2014-09-13
相关资源
最近更新 更多