问 2 个关于 Python 的简单问题。困扰我很久

2017 年 10 月 17 日
 northisland

操作 json 文件相关的。

我要读文件进来,

第一种写法

json_obj=None
with open(path) as f:
  json_obj=json.loads(f.read())

第二种写法

json_obj=json.loads(open(path).read())

问题 1:

第一种写法里,第一行能否删掉?

换言之,就是 with 里的变量 json_obj 能否自动 with 在这个过程后存在?

问题 2:

第二种写法,是否正确?临时变量 open(path)在结束时,是否释放了文件句柄?

提前谢谢各位帮助答疑解惑

5568 次点击
所在节点    Python
25 条回复
linuxchild
2017 年 10 月 17 日
with 就是用来自动释放的 - -。没有 with 咋个释放
zmj1316
2017 年 10 月 17 日
GC 的时候会 close 掉的
honmaple
2017 年 10 月 18 日
第一种第一行肯定可以删,假设 with 语句出错了,想要捕捉错误可以用 try...except,json_obj 就可以另外定义到 except 里,如果 with 出错了不捕捉,预先定义好的 json_obj 又有什么用
siteshen
2017 年 10 月 19 日
1. 不知道是否可以删。我的建议是不要删,这样就不用关心 with 的作用域的问题;
2. open(path).read() 肯定不会自动 close 文件,和 python 哲学 "Explicit is better than implicit" 冲突。

ps: 可以使用函数 `json.load` 少敲几个字符。
wangdaqiao
2017 年 10 月 26 日
第一种,可以简化一点点

with open(path) as f:
json_obj=json.load(f)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/398359

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX