Python3中异常处理:try-finally语句
一. 简介
在 Python中,异常处理是一种对程序运行时异常的处理机制,通过捕获并处理程序运行过程中可能出现的错误,从而避免程序崩溃。
Python 提供了 try,except,else和 finally关键字来处理异常。本文来学习一下 try...finally 语句结构。
二. Python3中异常处理:try-finally 语句
try...finally 语句是 Python中用于确保,某些代码无论是否发生异常都会被执行的一种结构。这种结构特别适用于需要执行清理操作的场景,比如,关闭文件,释放锁或网络连接等。
try...finally 语句结构如下:
#!/usr/bin/env python3
try:
#要执行的代码块
except ExceptionType1 as err:
#触发 ExceptionType1异常时,要执行的代码块
else:
#没有异常发生时,要执行的代码块
finally:
#无论是否发生异常,都会执行的代码块
try...finally 语句结构的执行过程:
1. 执行 try块
代码首先执行 try块内的逻辑。
2. 检查异常
无异常:若 try块执行后无异常,则跳过 except 块,直接执行 finally。
有异常:若 try块执行中发生异常,Python会立刻暂停当前流程(try 块中剩下未运行的代码),转而去执行 finally块。
3. 执行 finally块
finally块的代码必定运行,无论try 块代码是否发生异常,或是否有 return 、break、continue等等控制流语句。
三. 示例
示例 1:释放资源的功能
#!/usr/bin/env python3
fd = open("test.txt", 'r')
try:
fd.read()
#finally块用于关闭文件
finally:
fd.close()
示例 2:覆盖返回值或覆盖异常
如果 finally 代码块中有 return或 新的异常,则会覆盖 try 或 except块中结果。因此,在 finally块中应尽量避免引发异常,除非有理由要这么做。
示例如下:
#!/usr/bin/env python3
def sub_func():
try:
return "from try code-blocks"
finally:
return "from finally code-blocks"
#调用函数 sub_func()
info = sub_func()
print(info)
运行后结果如下:
示例 3:如果在 try块中发生了异常并且该异常未被捕获(即没有 except异常处理块的代码),则运行了 finally块的代码后才抛出异常。如下所示:
#!/usr/bin/env python3
try:
value1 = 20/0
#发生异常后,try代码块后续代码不会执行
value2 = 10*1
print("try code-blocks executed.")
finally:
print("finally code-blocks executed.")
运行后结果如下:
下一篇文章写一些示例,继续学习一下 try...finally语句的使用。