ResourceWarning для файла, который не закрыт, но UnitTest выбрасывает его - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть такая функция:

def init_cars(self, directory=''):
    #some_code
    cars = set([line.rstrip('\n') for line in open(directory + "../myfolder/all_cars.txt")])
    #some_more_code

Я пишу unittest, и когда я запускаю их, я получаю следующую ошибку:

ResourceWarning: unclosed file <_io.TextIOWrapper name='../myfolder/all_cars.txt' mode='r' encoding='UTF-8'>
  names = set([line.rstrip('\n') for line in open(directory + "../myfolder/all_cars.txt")])
ResourceWarning: Enable tracemalloc to get the object allocation traceback

Нашел ответ, но могу ' я не могу применить к моему коду: Python 3: ResourceWarning: открытый файл <_io.TextIOWrapper name = 'PATH_OF_FILE' </a>

Я попробовал несколько вещей, сделал некоторый код изменения, но не могу понять, Может ли кто-нибудь дать мне пример кода о том, как преодолеть это, используя мой пример кода, пожалуйста!

1 Ответ

2 голосов
/ 23 апреля 2020

Python не закрывает для вас файловый дескриптор автоматически, если на него больше нет ссылок. Это удивительно. Например.

def foo():
    f = open("/etc/passwd")
    for line in f:
        print(line)

Это приведет к ResourceWarning, даже если f больше не будет доступен после возврата foo ().

Решение состоит в том, чтобы явно закрыть файл.

fh = open(directory + "../myfolder/all_cars.txt")
cars = set([line.rstrip('\n') for line in fh]
fh.close()

Или используйте with, который закроет файл для вас.

with open(directory + "../myfolder/all_cars.txt") as fh:
  cars = set([line.rstrip('\n') for line in fh]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...