Does filehandle get closed automatically in Python after it goes out of scope?

后端 未结 2 1234
孤城傲影
孤城傲影 2020-11-29 08:59

If I do the following, does filehandle get closed automatically as it goes out of scope in Python:

def read_contents(file_path):
  return file(file_path).rea         


        
相关标签:
2条回答
  • 2020-11-29 09:36

    It should close the file handle in the file's __del__ statement, but a better approach would be to use a with block:

    def read_contents(file_path):
      with open(file_path, 'r') as f:
        return f.read()
    

    See http://docs.python.org/library/stdtypes.html#file.close for more information.

    0 讨论(0)
  • 2020-11-29 09:54

    To expand on FogleBird's answer, if you do not explicitly close it then the file will be closed automatically when the file object is destroyed. In CPython this will happen as soon as there are no more references to it, e.g. if it is a local variable in a function and the function ends. However if an exception is thrown in the function and file is not explicitly closed using a with statement or a try:...finally: then a reference to the file will be kept as part of the stack trace in the traceback object and the file will not be closed, at least until the next exception is thrown.

    Also IronPython and Jython use the garbage collection facilities of the .Net CLR and Java JVM respectively. These are not reference counted, so the file will remain open indefinitely until the garbage collector decides to reclaim the object's memory or the program terminates.

    So in general it is important to explicitly close the file using either with: or try:...finally:.

    Of course all this is holds true for any other type of object that requires explicit cleanup.

    0 讨论(0)
提交回复
热议问题