What's the advantage of using 'with .. as' statement in Python?

元气小坏坏 提交于 2019-11-26 23:13:15

问题


with open("hello.txt", "wb") as f:
    f.write("Hello Python!\n")

seems to be the same as

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

What's the advantage of using open .. as instead of f = ? Is it just syntactic sugar? Just saving one line of code?


回答1:


In order to be equivalent to the with statement version, the code you wrote should look instead like this:

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

While this might seem like syntactic sugar, it ensures that you release resources. Generally the world is more complex than these contrived examples and if you forget a try.. except... or fail to handle an extreme case, you have resource leaks on your hands.

The with statement saves you from those leaks, making it easier to write clean code. For a complete explanation, look at PEP 343, it has plenty of examples.




回答2:


If f.write throws an exception, f.close() is called when you use with and not called in the second case. Also f has a smaller scope and the code is cleaner when using with.




回答3:


The former still closes f if an exception occurs during the f.write().



来源:https://stackoverflow.com/questions/2738365/whats-the-advantage-of-using-with-as-statement-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!