В отличие от других предложенных ответов, я полагаю, что мы можем привести веские аргументы в пользу извлечения рассола. Этот ответ: «Да, неполный рассол всегда приводит к исключению».
Почему мы можем это сделать? Потому что формат «pickle» на самом деле является небольшим языком, основанным на стеке. На языке стека вы пишете код, который помещает элемент за элементом в стек, а затем вызывает оператор, который что-то делает с накопленными вами данными. И так уж получилось, что рассол должен заканчиваться командой «.», Которая гласит: «возьмите элемент сейчас в нижней части стека и верните его как значение этого рассола». Если ваш рассол рано отрубится, он не закончится этой командой, и вы получите ошибку EOF.
Если вы хотите попытаться восстановить некоторые из данных, вам, возможно, придется написать свой собственный интерпретатор или вызвать где-нибудь в pickle.py запрос о том, чтобы вызвать EOFError, когда завершите интерпретацию стека, не найдя «.». Главное, что нужно иметь в виду, это то, что, как и в большинстве языков, основанных на стеке, большие структуры данных создаются «в обратном направлении»: сначала вы помещаете в стек множество маленьких строк или чисел, , а затем . операция, которая говорит «собрать их вместе в список» или «собрать пары элементов в стек и создать словарь». Таким образом, если прерывание будет прервано, вы обнаружите, что стек полон кусков объекта, который должен был быть построен, но вам не хватит того финального кода, который сообщит вам , что будет построен из кусочков.