gpt4 book ai didi

python - 超出范围后,文件句柄是否会在 Python 中自动关闭?

转载 作者:IT老高 更新时间:2023-10-28 20:30:28 28 4
gpt4 key购买 nike

如果我执行以下操作,文件句柄是否会在超出 Python 范围时自动关闭:

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

如果没有,我该如何编写这个函数来自动关闭作用域?

最佳答案

为了扩展 FogleBird 的答案,如果您没有明确关闭它,那么当文件对象被销毁时,文件将自动关闭。在 CPython 中,只要不再引用它就会发生这种情况,例如如果它是函数中的局部变量并且函数结束。但是,如果函数中抛出异常并且文件没有使用 with 语句或 try:...finally: 显式关闭,则对该文件的引用将是作为堆栈跟踪的一部分保留在 traceback 对象中,并且文件不会关闭,至少在引发下一个异常之前不会关闭。

IronPython 和 Jython 也分别使用 .Net CLR 和 Java JVM 的垃圾收集工具。这些不是引用计数的,因此文件将无限期保持打开状态,直到垃圾收集器决定回收对象的内存或程序终止。

因此,一般来说,使用 with:try:...finally: 显式关闭文件很重要。

当然,所有其他类型的需要显式清理的对象都适用。

关于python - 超出范围后,文件句柄是否会在 Python 中自动关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2404430/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com