|

楼主 |
发表于 2019-3-7 16:58:44
|
显示全部楼层
那么反推的话,如果是我理解错了。
在零基础入门学习python这门课中课后作业第三题小甲鱼给出的答案就是存在问题的.
3. 把文件关闭放在 finally 语句块中执行还是会出现问题,像下边这个代码,当前文件夹中并不存在"My_File.txt"这个文件,那么程序执行起来会发生什么事情呢?你有办法解决这个问题吗?
- try:
- f = open('My_File.txt') # 当前文件夹中并不存在"My_File.txt"这个文件T_T
- print(f.read())
- except OSError as reason:
- print('出错啦:' + str(reason))
- finally:
- f.close()
复制代码
由于finally语句块里试图去关闭一个并没有成功打开的文件,因此会弹出错误内容如下:
- >>> 出错啦:[Errno 2] No such file or directory: 'My_File.txt'
- Traceback (most recent call last):
- File "C:\Users\FishC000\Desktop\test.py", line 7, in <module>
- f.close()
- NameError: name 'f' is not defined
复制代码
我们这么修正:
- try:
- f = open('My_File.txt') # 当前文件夹中并不存在"My_File.txt"这个文件T_T
- print(f.read())
- except OSError as reason:
- print('出错啦:' + str(reason))
- finally:
- if 'f' in locals():
- f.close()
复制代码
上面是小甲鱼给出的答案,按他这个意思,如果试图打开一个不存在的文件。那么在finally语句中if 'f' in locals()就会返回False。如果打开一个存在的文件,那么if条件返回True,执行关闭文件。
这又怎么解释? |
|