前言
异常处理机制可以使我们的程序在遇到错误或非预期的时候不会终止程序的运行,提升友好性。在文件操作,尤其是关闭文件时,文件打开的过程中可能出现了异常,这时可以使用异常处理机制来关闭文件句柄
问题
最本能的代码如下:
try:
fh = open("c:\a.py", "r")
finally:
print ("关闭文件")
fh.close()
但是运行之后会出现完全相反的效果,不但没有捕获异常还增加了新的异常,结果如下:
这是因为由于指定的c:\a.py根本不存在,导致fh变量没有初始值,那么在finally中直接对fh进行关闭操作就会抛出变量没有定义的异常
解决方法
通用的处理打开文件异常的方式是使用嵌套的try;先等文件成功打开后,在用try...finally做内层的异常处理,在finally中执行关闭文件的操作。代码如下:
try:
fh = open(r"f:\a.py", "r",encoding='utf-8')
try:
content = fh.read()
print (content)
finally:
print ("关闭文件")
fh.close()
except IOError:
print ("Error: 没有找到文件或读取文件失败")