如果我执行以下操作,在Python中,文件句柄会在超出作用域时自动关闭吗?
def read_contents(file_path):
return file(file_path).read()
如果不行,我该如何编写这个函数以自动关闭作用域?
with
语句或try:...finally:
来明确关闭,则文件的引用将作为堆栈跟踪的一部分保留在traceback对象中,文件将不会关闭,至少直到下一个异常被抛出。with:
或try:...finally:
明确关闭文件。它应该在文件的__del__
语句中关闭文件句柄,但更好的方法是使用一个with
块:
def read_contents(file_path):
with open(file_path, 'r') as f:
return f.read()
请查看http://docs.python.org/library/stdtypes.html#file.close以获取更多信息。
with
。从future导入可以吗?我使用的是Python 2.5。 - bodacydoimport with from future
是否仍然有效? - bodacydof
本身会发生什么?那个文件句柄会一直保持打开状态,直到所有对它的引用都丢失吗?还是移出with
作用域会自动关闭句柄,并将一个(可能无用的)关闭句柄返回给调用者? - davidA