鱼C论坛

 找回密码
 立即注册
查看: 1523|回复: 6

[已解决]finally下面的语句代码不太理解意义,请求鱼油高手解答!

[复制链接]
发表于 2020-10-24 09:43:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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()
最佳答案
2020-10-24 11:48:10
locals() 函数会以字典类型返回当前位置的全部局部变量。
如果f = open('My_File.txt')执行成功,那么文件变量f就会存在全局局部变量里,检测f是否在locals里,就能判断是否打开成功,进而关闭
详细语法参考:
https://www.runoob.com/python/python-func-locals.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-24 09:53:55 | 显示全部楼层
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()

对于你这个例子
执行完
  f = open('My_File.txt') # 当前文件夹中并不存在"My_File.txt"这个文件T_T
    print(f.read())
之后,是否执行
print('出错啦:' + str(reason))
要看是否出现异常

而finally后的东西,无论如何都一定会执行
也就是说,无论前面出什么幺蛾子,程序都会执行判断下面的代码
 if 'f' in locals(): # 如果文件对象变量存在当前局部变量符号表的话,说明打开成功
        f.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-24 11:43:34 | 显示全部楼层
昨非 发表于 2020-10-24 09:53
对于你这个例子
执行完

我主要是对下面这一句代码不太明白。能给讲讲这个locals()是什么意思吗?f 存在locals()

if 'f' in locals(): # 如果文件对象变量存在当前局部变量符号表的话,说明打开成功
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 11:48:10 | 显示全部楼层    本楼为最佳答案   
locals() 函数会以字典类型返回当前位置的全部局部变量。
如果f = open('My_File.txt')执行成功,那么文件变量f就会存在全局局部变量里,检测f是否在locals里,就能判断是否打开成功,进而关闭
详细语法参考:
https://www.runoob.com/python/python-func-locals.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 11:48:42 | 显示全部楼层
满意的话记得设为最佳答案哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-24 11:54:22 | 显示全部楼层
昨非 发表于 2020-10-24 11:48
满意的话记得设为最佳答案哦

谢谢你,已经设为最佳答案了。感谢鱼C有你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 11:58:05 From FishC Mobile | 显示全部楼层
深山小兽 发表于 2020-10-24 11:54
谢谢你,已经设为最佳答案了。感谢鱼C有你

客气了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 07:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表