2017-02-02 14 views
0

Я продолжаю получать эту ошибку, и я не знаю, как ее исправить. Мне нужна помощь.Python 2 - ValueError: недостаточно значений для распаковки (ожидается 6, получено 1)

ValueError: not enough values to unpack (expected 6, got 1) 

Это, как я загрузить

with open('objs.pickle', "rb") as f: 
    money, hunger, thirst, energy, wanted, gun = pickle.load(f) 

и это, как я сохранить

with open('objs.pickle', 'ab') as f: # Python 3: open(..., 'wb') 
    pickle.dump([money, hunger, thirst, energy, gun, wanted], f) 
+0

Вы открыли файл в режиме 'ab' при сериализации данных. Зачем? И почему бы вам открыть его в другом режиме на Python 3? Похоже, у вас может быть и другой хлам в этом файле. – user2357112

+0

Проверьте, что 'pickle.load (f)' возвращает. Это должен быть один элемент. – Carcigenicate

+0

его возвращает денежную переменную – Cube

ответ

0

pickle.load загрузит только первый консервированный объект, который находит в файле. В вашем случае это словарь с более чем двумя ключами, поэтому x, y = pickle.load (...) терпит неудачу, потому что он пытается распаковать ключи словаря к идентификаторам x и y.

with open("objs.pickle") as f: 
    first_dict = pickle.load(f) # file pointer is now at end of first object 
    second_dict = pickle.load(f) # read in second object 

Etc.

Вы лучше, если эти слова в один объект, например, кортеж и мариновать этот единственный объект. Это намного проще, если вы не знаете точно, сколько маринованных объектов находится в файле.

my_list = ['money', 'hunger', 'thirst', 'energy', 'wanted', 'gun'] 
tuple(my_list) 

Теперь легче рассортировать кортеж my_list.

+0

wait, но теперь я получаю эту ошибку – Cube

+0

TypeError: аргумент int() должен быть строкой, байтовым объектом или числом, а не «списком», – Cube