Python 未关闭的资源:删除文件是否安全



谷歌搜索了这个问题,但没有找到任何解决方案。我正在使用Eclipse和PyDev插件运行Python 3.3,当我运行任何Python项目时,我会收到以下消息:

/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/update_checker.py:37: ResourceWarning: unclosed file <_io.BufferedReader name='/var/folders/x4/st67yr0x6qg7znh7sdfr94kh0000gn/T/update_checker_cache.pkl'>
  permacache = pickle.load(open(filename, 'rb'))

我对Python有点陌生,我不知道这意味着什么。我想在删除之前询问以确保删除它是安全的。这甚至意味着什么?我得到一个打开的文件...但是为什么Python向我抱怨?我正在使用 PRAW 库,如果这有什么不同的话。

更新:我的代码在sourceforge上,但它不能可靠地出现错误(在2台不同的计算机上尝试)。一旦出现错误,它永远不会消失。

此资源警告表示您打开了一个文件,使用了它,但后来忘记关闭该文件。 当 Python 注意到文件对象已死时,它会为您关闭它,但这只会在经过一些未知时间后才会发生。 因此,在最近的版本中,Python 在执行此操作时也会打印 ResourceWarning。 这是一种快速识别未关闭文件的位置并正确关闭它们的方法。 在某些不能同时打开超过 N 个文件的平台上(例如 1024),这可能很重要。 此外,特别是在 Windows 上,如果文件仍处于打开状态(例如删除文件),则无法对文件执行某些操作。

在这种情况下,文件update_checker.py中的行需要固定为:

with open(filename, 'rb') as f:   # will close() when we leave this block
    permacache = pickle.load(f)

最新更新