异步编程 Python asyncio 小白学习-python中finally的用法

Black Python 12 次浏览 异步编程 Python asyncio 小白学习-python中finally的用法已关闭评论

在python中,处理异常模块是十分常见的。简单举个例子:

 

我们可以看到,在try语句中发生了异常,而finally中依然会执行里面的代码。

实际上,在执行finally语句之前,不管是try还是except语句中是否有发生异常,finally中的代码依旧会执行。

那要是遇到了return,break和exit()等语句 也依旧会执行fianlly里面的代码吗?

让我们再看下面一个例子:

是不是觉得很奇怪?为什么输出的是2不是1。

以下内容来自Python官方文档Defining Clean-up Actions部分:

A finally clause is always executed before leaving the try statement, whether an exception has occurred or not. When an exception has occurred in the try clause and has not been handled by an except clause (or it has occurred in an except or else clause), it is re-raised after the finally clause has been executed. The finally clause is also executed “on the way out” when any other clause of the try statement is left via a break, continue or return statement.

大概总结一下:

1.finally代码块永远是try语句块中最后一个执行的

2.而当在try语句块或者except中遇到像return,break,exit()这类跳出循环或者终结程序的语句的时候,首先执行里面的内容,再执行finally语句块里的代码。

在上述代码中,try语句块里return出来了1,再到finally语句块中执行了return语句,1被替代为了2,所以最后输出来的是2而不是1。

所以,只要try语句块中有finally,那么它一定是最后执行的。因为这样,一般不建议在finally里面写return语句,这样会使其他地方的return语句都失效,另外,finally中不支持写continue语句,finally一般只做一些资源释放的操作。

以上内容仅为本人的一点理解,若有不足,欢迎指正!

Go