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 =有什么好处? 它只是语法糖吗?只需保存一行代码?
答案 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
而在第二种情况下不调用f
。 with.
范围也较小,使用{{1}}
答案 2 :(得分:3)
如果在f
期间发生异常,前者仍会关闭f.write()
。