Is it good practice to depend on python's with…as statement

拈花ヽ惹草 提交于 2019-12-03 11:52:40

问题


I'm curious if it is considered safe or good practice to depend on python's with...as statement. For example when opening a file:

with open("myfile","w") as myFile:
    #do something

So in this example I neglected to explicitly call myFile.close() however I can assume it was called when python exited the with...as statement by calling the objects __exit__() method. Is it good practice/safe to depend upon this or would it be better to always explicitly call file.close()


回答1:


This is what context managers are for, to rely on them to close the file for you. Context managers are called even if there was an exception.

The alternative is to use an finally block instead:

myFile = open("myfile","w")
try:
    # do something with myFile
finally:
    myFile.close()

but because the block inside of the try: might be long, by the time you get to the finally statement you have forgotten what you were setting this up for.

Context managers are more powerful still. Because the __exit__ method is informed of any exceptions, they can act as exception handlers as well (ignore the exception, raise another, etc.).




回答2:


Yes, the with statement is better way. Since Python 2.5, the file object has been equipped with __enter__() and __exit__() methods. The __exit__() method closes the file object.

Python guarantees that it will call the __exit__() method, but there is not guarantee that the __exit__() method will close the resource, especially with 3rd party code. You need to manually verify that.



来源:https://stackoverflow.com/questions/14776853/is-it-good-practice-to-depend-on-pythons-with-as-statement

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