ошибка pickle: "EOFerror: ran out of input" при загрузке списка из файла

пытаюсь выгрузить из файла список в bytes-файле

with open(filename, 'rb') as f:
        if f.read() == '':
            debtList = []
        else:
            debtList = pcl.load(f)

уложенный здесь

with open(filename, 'wb') as f:
    pcl.dump(debtList, f)

я получаю ошибку EOFError: Ran out of input при запуске, почему так происходит и что с этим делать?


Ответы (1 шт):

Автор решения: CrazyElf
with open(filename, 'rb') as f:
        if f.read() == '':
            debtList = []

В этот момент файл f весь прочитан от начала и до конца, указатель установлен на конец файла. И я не очень понимаю, что и с чем вы тут сравниваете, работает ли нормально сравнение считанных байтов со строкой.

        else:
            debtList = pcl.load(f)

А здесь вы пытаетесь ещё раз прочитать уже прочитанный файл f с указателем, установленным на конец файла. Естественно, ничего вы уже не можете прочитать.

Решением может быть, например, установка указателя обратно на начало файла перед повторным его чтением:

        else:
            f.seek(0)
            debtList = pcl.load(f)
→ Ссылка