在 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/56147460/