bod*_*ydo 22 python scope file
如果我执行以下操作,文件句柄会在Python中超出范围时自动关闭:
def read_contents(file_path):
return file(file_path).read()
Run Code Online (Sandbox Code Playgroud)
如果没有,我该怎么写这个函数来自动关闭范围?
Dav*_*rby 35
要扩展FogleBird的答案,如果您没有明确关闭它,那么当文件对象被销毁时,文件将自动关闭.在CPython中,只要没有对它的引用,就会发生这种情况,例如,如果它是函数中的局部变量并且函数结束.但是,如果在函数中抛出异常并且未使用with语句显式关闭文件,则try:...finally:对文件的引用将作为traceback对象中堆栈跟踪的一部分保留,并且文件将不会关闭,至少直到抛出下一个异常.
此外,IronPython和Jython分别使用.Net CLR和Java JVM的垃圾收集工具.这些不是引用计数,因此文件将无限期保持打开,直到垃圾收集器决定回收对象的内存或程序终止.
所以一般使用显式关闭该文件是很重要的with:还是try:...finally:.
当然,对于需要显式清理的任何其他类型的对象,所有这些都适用.
Fog*_*ird 20
它应该关闭文件__del__语句中的文件句柄,但更好的方法是使用with块:
def read_contents(file_path):
with open(file_path, 'r') as f:
return f.read()
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参见http://docs.python.org/library/stdtypes.html#file.close.
| 归档时间: |
|
| 查看次数: |
8373 次 |
| 最近记录: |