What's the advantage of using 'with .. as' statement in Python?
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?
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.
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.
The former still closes f
if an exception occurs during the f.write()
.
精彩评论