Python unclosed resource: безопасно ли удалять файл?

Googled мой путь вокруг этой проблемы, но не нашел никаких решений. Я запускаю Python 3.3 с плагином Eclipse и PyDev, и когда я запускаю любой проект 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, и я понятия не имею, что это значит. Я хотел спросить, прежде чем удалять это, чтобы убедиться, что это безопасно удалить. Что это вообще значит? У меня есть открытый файл... но почему питон жалуется мне? Я использую библиотеку PRAW, если это делает разница.

Update: мой код здесь, на sourceforge, но он не надежно придумал ошибку (пробовал на 2 разных компьютерах). Как только появляется ошибка, она никогда не исчезает.

1 ответов


этот ResourceWarning означает, что вы открыли файл, использовали его, но потом забыли закрыть файл. 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)