В Python есть удобный режим, определяющий код с неверно закрытыми ресурсами. Этот режим называется Development Mode и включается двумя способами:
Переменная окружения
export PYTHONDEVMODE=1
python3 app.py
Аргументы
python3 -X dev app.py
Если не закрыть файл должным образом, то вы получите в консоль ResourceWarning.
Вот пример файла
# app.py
import psutil, os
open('testfile', 'w')
123
print('process handlers:', psutil.Process(os.getpid()).open_files())
В этом примере я использую пакет psutil, чтобы убедиться, что перед выходом открытых файлов в моём процессе не осталось.
При этом ResourceWarning всё равно будет выброшен, причём еще до использования psutil.
app.py:3: ResourceWarning: unclosed file <_io.TextIOWrapper name='testfile' mode='w' encoding='UTF-8'>
open('testfile', 'w')
Object allocated at (most recent call last):
File "app.py", lineno 3
open('testfile', 'w')
process handlers: []
Для отображения строки с ошибкой требуется включить tracemalloc, тоже с помощью переменой или аргументов запуска. Смотрите примеры в доке.
➡️ Отсюда вывод: Всегда явно закрывайте файлы! Пишите чистый и предсказуемый код.
#tricks#libs