前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python finally的用法

Python finally的用法

作者头像
狼啸风云
修改2022-09-03 20:01:54
4.7K0
修改2022-09-03 20:01:54
举报
文章被收录于专栏:计算机视觉理论及其实现

try语句有一个可选finally子句,用于定义在所有情况下都必须执行的finally操作

代码语言:javascript
复制
try:
    raise KeyboardInterrupt
finally:
    print('Goodbye, world!')


Goodbye, world!
KeyboardInterrupt
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>

如果存在finally子句,则该finally子句将作为try语句完成之前的最后一项任务执行。finally无论该try语句是否产生异常,该子句都会运行。

以下几点讨论了发生异常时更复杂的情况:

  • 如果在执行该try子句期间发生异常,则该异常可以由except子句处理。如果该异常未由except子句处理,finally则在执行该子句后将重新引发该异常。
  • 执行exceptor else子句期间可能会发生异常。同样,在finally执行该子句之后,将重新引发异常。
  • 如果try语句到达breakcontinuereturn语句时,finally条款将在<try or else or except的>breakcontinuereturn语句之前执行。
  • 如果finally子句包含一条return语句,则该finally子句的return语句将在<try or else or except的>子句中的return语句之前执行,所以事实上执行了的是finally的return,而不是在<try or else or except>中执行return语句。

案例1.

代码语言:javascript
复制
>>> def bool_return():
...     try:
...         return True
...     finally:
...         return False
...
>>> bool_return()
False

 案例2.

代码语言:javascript
复制
def bool_return():
    try:
        raise Exception
    except Exception:
        return True
    finally:
        return False

print(bool_return())

False

案例3.

代码语言:javascript
复制
>>> def divide(x, y):
...     try:
...         result = x / y
...     except ZeroDivisionError:
...         print("division by zero!")
...     else:
...         print("result is", result)
...     finally:
...         print("executing finally clause")
...
>>> divide(2, 1)
result is 2.0
executing finally clause
>>> divide(2, 0)
division by zero!
executing finally clause
>>> divide("2", "1")
executing finally clause
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in divide
TypeError: unsupported operand type(s) for /: 'str' and 'str'
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/01/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档