gpt4 book ai didi

python - 显式关闭文件重要吗?

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

在 Python 中,如果您打开文件而不调用 close(),或者关闭文件但不使用 try-finally 或"with"语句,这是个问题吗?或者作为一种编码实践,依靠 Python 垃圾收集来关闭所有文件就足够了吗?例如,如果这样做:

for line in open("filename"):
# ... do stuff ...

...这是一个问题,因为文件永远无法关闭,并且可能发生阻止它被关闭的异常?还是肯定会因为文件超出范围而在 for 语句结束时关闭?

最佳答案

在您的示例中,不能保证在解释器退出之前关闭文件。在当前版本的 CPython 中,该文件将在 for 循环结束时关闭,因为 CPython 使用引用计数作为其主要的垃圾收集机制,但这是一个实现细节,而不是该语言的特性。 Python 的其他实现不能保证以这种方式工作。例如 IronPython、PyPy 和 Jython 不使用引用计数,因此不会在循环结束时关闭文件。

依赖 CPython 的垃圾回收实现是一种不好的做法,因为它会降低您的代码的可移植性。如果您使用 CPython,可能不会发生资源泄漏,但如果您切换到不使用引用计数的 Python 实现,则需要检查所有代码并确保所有文件都正确关闭。

您的示例使用:

with open("filename") as f:
for line in f:
# ... do stuff ...

关于python - 显式关闭文件重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7395542/

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