Python try finally

Python try finally教程

Python 中,每一个 try 语句后面都可以对应一个或多个 except 语句,同时,每一个 try 语句后面,还可以对应一个 finally 子句,当然,也可以不带 finally 字句,如果带 finally 字句,那么 finally 字句最多只能带一个。

try 字句后面的 finally 子句用来表示,不管前面的代码如何执行了,一定要执行的代码那么我们可以将其放在 finally 子句里,即使是没有触发异常,即没有执行 except 的代码,那么 finally 字句的代码一定也会执行。

Python try finally语句详解

语法

try: # 需要检测异常的代码 finally: # 一定要执行的语句

说明

try 语句后面可以不接 except 语句,直接加 finally 语句。

Python try except finally语句详解

语法

try: # 需要检测异常的代码 except Exception1: # 处理异常的代码 except Exception2: # 处理异常的代码 finally: # 一定要执行的语句

说明

我们在异常捕获时,将一定要执行的代码放在 finally 语句中。

案例

Python try except finally语句捕获异常

我们在异常处理时,将一定要处理的代码放在 finally 中

if __name__ == '__main__': print("嗨客网(www.haicoder.net)") try: num = input("Please input a number:") print("Your input is:", int(num)) except Exception: print("convert to number error") finally: print("call finally")

程序运行后,控制台输出如下:

07 python try finally捕获异常.png

我们在 main 函数里,使用 input 让用户输入,接着,我们将用户输入的 字符串 进行了 强制类型转换,转换成了 int 类型。

因为,我们输入的就是一个数字,因此,这里的转换成功,程序运行正常,没有触发 except 的逻辑,但是,我们看到程序还是执行了 finally 里的逻辑,现在,我们输入一个不是数字的字符串,程序运行后,控制台输出如下:

08 python try finally捕获异常.png

这次,我们输入的不是数字,而是一个字符串,这次将字符串转换成数字转换失败,因此,程序报出了异常,程序走到了 except 的异常处理代码,同时,也走到了 finally 的执行代码。

因此,我们可以看到不管程序怎么执行,finally 的代码一定会被执行。

Python try except finally语句捕获异常

我们在异常处理时,将一定要处理的代码放在 finally 中

if __name__ == '__main__': print("嗨客网(www.haicoder.net)") try: fp = open("haicoder.txt") print("file open succes") except IOError: print("file open failed") finally: fp.close() print("file closed")

程序运行后,控制台输出如下:

09 python try finally捕获异常.png

我们首先使用 open 打开文件,并且将打开文件的代码使用 try 进行异常捕获,最后,使用 finally 关闭文件,这里,因为,我们的文件不存在,因此,此时的 fp 变量 没有初始值,所以在 finally 语句中,没发正确关闭文件。

现在,我们只能使用双重 try 语句,当成功打开文件之后,再次使用 finally 关闭文件,将程序修改如下:

if __name__ == '__main__': print("嗨客网(www.haicoder.net)") try: fp = open("haicoder.txt") print("file open succes") try: content = fp.read() print("read file =", content) finally: print("close file") fp.close() except IOError: print("open file error")

第一个 try,我们捕获文件打开的错误,如果此时文件打开失败,那么就走到 IOError 的异常,因为文件打开失败,所以不需要关闭文件。

这里,我们文件不存在,所以执行到了打开文件失败的异常,现在我们创建文件,再次执行,,控制台输出如下:

10 python try finally捕获异常.png

此时,我们看到程序正确读取到了文件内容,并且最后在 finally 关闭了文件。

Python try finally异常捕获教程总结

try 字句后面的 finally 子句用来表示,不管前面的代码如何执行了,一定要执行的代码那么我们可以将其放在 finally 子句里,即使是没有触发异常,即没有执行 except 的代码,那么 finally 字句的代码一定也会执行。