【问题标题】:Why 'try/finally' interacts strangely with 'return' in Python? [duplicate]为什么“尝试/最终”与 Python 中的“返回”发生了奇怪的交互? [复制]
【发布时间】:2019-01-11 08:22:08
【问题描述】:

有人可以解释一下为什么会这样吗? Python 3.6.3

In [1]: def test():
   ...:     try:
   ...:         return 1
   ...:     finally:
   ...:         return 2
   ...:     

In [2]: test()
Out[2]: 2

编辑: 这并不完全重复,因为链接的问题在他们的try : 中引发了异常,而我的示例使用了我希望工作的return。这个函数看起来应该返回 1 但它返回 2 - 所以基本上 return 1 被忽略了。 finally 可以很好地吃掉任何上升的异常,但它也应该吃掉回报吗?

【问题讨论】:

  • 由于finally 将毫无例外地执行,我认为在这种情况下try 中的语句被执行但值不会返回。
  • 这个重复的答案对return和例外都有效。 stackoverflow.com/a/11164157/1977847

标签: python


【解决方案1】:

因为 finally 是一个清理动作,如果添加到 try 中总是会执行,除了,else,finally ;)

您可以在此处阅读有关错误处理的 Python 3 文档页面:https://docs.python.org/3/tutorial/errors.html

部分:8.6。定义清理操作

【讨论】:

    猜你喜欢
    • 2012-04-29
    • 2012-06-26
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多