Почему я получаю «Pickle – EOFError: Ran из ввода», читающий пустой файл?

Я получаю интересную ошибку при попытке использовать Unpickler.load() , вот исходный код:

 open(target, 'a').close() scores = {}; with open(target, "rb") as file: unpickler = pickle.Unpickler(file); scores = unpickler.load(); if not isinstance(scores, dict): scores = {}; 

Вот трассировка:

 Traceback (most recent call last): File "G:\python\pendu\user_test.py", line 3, in <module>: save_user_points("Magix", 30); File "G:\python\pendu\user.py", line 22, in save_user_points: scores = unpickler.load(); EOFError: Ran out of input 

Файл, который я пытаюсь прочитать, пуст. Как я могу избежать получения этой ошибки и вместо этого получить пустую переменную?

3 Solutions collect form web for “Почему я получаю «Pickle – EOFError: Ran из ввода», читающий пустой файл?”

Я бы проверял, что файл сначала не пуст:

 import os scores = {} # scores is an empty dict already if os.path.getsize(target) > 0: with open(target, "rb") as f: unpickler = pickle.Unpickler(f) # if file is not empty scores will be equal # to the value unpickled scores = unpickler.load() 

Также open(target, 'a').close() ничего не делает в вашем коде, и вам не нужно использовать ; ,

Вы можете поймать это исключение и вернуть то, что вы хотите оттуда.

 open(target, 'a').close() scores = {}; try: with open(target, "rb") as file: unpickler = pickle.Unpickler(file); scores = unpickler.load(); if not isinstance(scores, dict): scores = {}; except EOFError: return {} 

Как вы видите, это на самом деле естественная ошибка.

Типичная конструкция для чтения из объекта Unpickler будет такой.

 try: data = unpickler.load() except EOFError: data = list() # or whatever you want 

EOFError просто поднят, потому что он читает пустой файл, это просто означает « Конец файла» .

  • python 2.6 cPickle.load приводит к EOFError
  • Django - сохранение объектов в сеансе
  • Каковы подводные камни использования Dill для сериализации моделей scikit-learn / statsmodels?
  • Как хранить большой словарь?
  • Как проверить, какая деталь сложного объекта не может быть маринована
  • Как сохранить экземпляр объекта libSVM python?
  • Как рассолить CookieJar?
  • Python: использование `copyreg` для определения редукторов для типов, которые уже имеют редукторы
  • Объекты Pickle Queue в python
  • Python: сохранение объектов и использование рассола. расширение имени файла
  • Ошибка многопроцессорности Python с помощью методов класса
  • Python - лучший язык программирования в мире.