在Python中使用'with .. as'语句有什么好处?

24 投票
3 回答
10915 浏览
提问于 2025-04-15 22:09
with open("hello.txt", "wb") as f:
    f.write("Hello Python!\n")

看起来和这个是一样的

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()

使用 open .. as 代替 f = 有什么好处呢?这只是语法上的花哨吗?只是省了一行代码吗?

3 个回答

3

前者在执行 f.write() 时,如果发生了错误,仍然会关闭 f

13

如果在使用 f.write 时出现错误,使用 with 的时候会自动调用 f.close(),而在第二种情况下就不会调用。此外,使用 with 的时候,f 的作用范围更小,代码看起来也更整洁。

36

为了让你的代码和 with 语句的效果一样,你写的代码应该像这样:

f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()

虽然这看起来像是语法上的小花招,但它能确保你释放资源。一般来说,现实情况比这些简单的例子要复杂得多,如果你忘记写 try.. except... 或者没有处理一些极端情况,你可能会遇到资源泄漏的问题。

with 语句可以帮助你避免这些泄漏,让你写出更干净的代码。想要了解更多,可以看看 PEP 343,里面有很多例子。

撰写回答