本篇文章为大家展示了什么是Python最后语句,代码简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
有些时候,程序在试块里打开了一些物理资源(例如数据库连接,网络连接和磁盘文件等),这些物理资源都必须被显式回收。
Python的垃圾回收机制不会回收任何物理资源,只能回收内存中对象所占用的内存。
那么在哪里回收这些物理资源呢?在试块里回收,还是在除了块中进行回收?假设程序在试块里进行资源回收,根据图1所示的异常捕获流程,如果试块的某条语句引发了异常,该语句后的其他语句通常不会获得执行的机会,这将导致位于该语句之后的资源回收语句得不到执行。如果在除了块里进行资源回收,因为除了块完全有可能得不到执行,这将导致不能及时回收这些物理资源。
为了保证一定能回收在试块中打开的物理资源,异常处理机制提供了最后块。不管试块中的代码是否出现异常,也不管哪一个除了块被执行,甚至在试块或除块中执行了返回语句,最后块总会被执行。
Python完整的异常处理语法结构如下:
试题: ,,,#业务实现代码 except SubException  as e: ,,,#异常处理块1 ,,,… except SubException2  as e: ,,,#异常处理块2 ,,,… 其他: ,,,#正常处理块 finally : ,,,#资源回收块 ,,,…
在异常处理语法结构中,只有试块是必需的,也就是说:如果没有试块,则不能有后面的除了块和最后块;除了块和最后块都是可选的,但除了块和最后块至少出现其中之一,也可以同时出现,可以有多个除了块,但捕获父类异常的除了块应该位于捕获子类异常的除了块的后面;不能只有试块,既没有除了块,也没有最后块;多个除了块必须位于试块之后,最后块必须位于所有的除了块之后。
看一下程序
import 操作系统 def 测试(): ,,,fis =,没有 ,,,试一试: ,,,,,,,fis =,开放(“a.txt") ,,,except OSError as e: ,,,,,,,印刷(e.strerror) ,,,,,,,#,返回语句强制方法返回 ,,,,,,,return ,,,,,,, #① ,,,,,,,os._exit (1),,,,, #② ,,,最后: ,,,,,,,#,关闭磁盘文件,回收资源 ,,,,,,,if fis is not 没有: ,,,,,,,,,,,试一试: ,,,,,,,,,,,,,,,#,关闭资源 ,,,,,,,,,,,,,,,fis.close () ,,,,,,,,,,,except OSError as 埃克斯波特学院: ,,,,,,,,,,,,,,,印刷(ioe.strerror) ,,,,,,,印刷(“执行最后块里的资源回收!“) 测试()
上面程序在试块后增加了最后一块,用于回收在试块中打开的物理资源。注意在程序的除了块中①处有一条返回语句,该语句强制方法返回。在通常情况下,一旦在方法里执行到返回语句,程序将立即结束该方法:现在不会了,虽然返回语句也强制方法结束,但一定会先执行最后块的代码只
运行上面程序,将看到如下运行结果:
No such file 或是目录 执行最后里的资源回收!
上面的运行结果表明在方法返回之前执行了最后一块的代码。将①处的返回语句注释掉,取消②处代码的注释,即在异常处理的除了块中使用os._exit(1)语句来退出Python解释器。运行上面代码,将看到如下运行结果:
No such file 或是目录
上面的运行结果表明最后块没有被执行。如果在异常处理代码中使用os.exit(1)语句来退出Python解释器,则最后块将失去执行的机会。
除非在试块,除了块中调用了退出Python解释器的方法,否则不管在试块,除了块中执行怎样的代码,出现怎样的情况,异常处理的最后一块总会被执行。调用sys.exit()方法退出程序不能阻止最后块的执行,这是因为sys.exit()方法本身就是通过引发SystemExit异常来退出程序的。
在通常情况下,不要在最后块中使用如恢复或提高等导致方法中止的语句(提高语句将在后面介绍),一旦在最后块中使用了恢复或提高语句,将会导致试块,除了块中的回报,提高语句失效。看如下程序:
def 测试(): ,,,试一试: ,,,,,,,#,因为最后块中包含了返回语句 ,,,,,,,#,所以下面的返回语句失去作用 ,,,,,,,return 真实的 ,,,最后: ,,,,,,,return 错误的 时间=a 测试() print ()什么是Python最后语句