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

时间:2010-04-29 14:58:34

标签: python with-statement

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 ...而不是f =有什么好处? 它只是语法糖吗?只需保存一行代码?

3 个答案:

答案 0 :(得分:26)

为了等同于with语句版本,您编写的代码应该看起来像这样:

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

虽然这可能看起来像语法糖,但它确保您释放资源。一般来说,世界比这些人为的例子更复杂,如果你忘记了try.. except...或者未能处理极端情况,你手上就会有资源泄漏。

with语句可以帮助您避免这些泄漏,从而更容易编写干净的代码。要获得完整的解释,请查看PEP 343,它有很多示例。

答案 1 :(得分:13)

如果f.write引发异常,则在使用f.close()时调用with而在第二种情况下不调用fwith.范围也较小,使用{{1}}

时代码更清晰

答案 2 :(得分:3)

如果在f期间发生异常,前者仍会关闭f.write()