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

2017-10-17 15:32:11 +08:00
 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)在结束时,是否释放了文件句柄?

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

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

ps: 可以使用函数 `json.load` 少敲几个字符。
wangdaqiao
2017-10-26 17:58:41 +08:00
第一种,可以简化一点点

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

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

https://www.v2ex.com/t/398359

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

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

© 2021 V2EX