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

标签 python file scope

如果我执行以下操作,文件句柄是否会在超出 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/

相关文章:

javascript - 评估 10 和 (10)

python - 用OpenCV检测银球和反光球

python - 尝试在 Django 中创建缩略图时获取无法识别图像文件

python - 如何计算ndarray中元素的频率

python - 使用python读取和写入大文件

c++ - 如何将文件嵌入到可执行文件中?

java - Netbeans创建的Jar不起作用,但IDE内部程序可以工作

python - 加载yaml时如何使用自定义字典类?

java - 请求作用域 bean 有什么用?

java - 计算连续数字