Травление с использованием протокола 2: данные Python3-> 2

107
9

Я пытаюсь передать данные массива данных, созданного в Python3.2, рассортировать его, а затем открыть в Python2.7. Тем не менее, есть часть данных, на которые Python2.7 возражает, хотя на образце данных он отлично работает, и мне было интересно, как понять, что происходит не так.


Итак, в Python3.2:


import pickle
with open('c:\\test.pickle', mode='wb') as f:
pickle.dump(t_array, f, 2)

Затем при чтении в Python2.7:


import pickle
f = open('c:\\test.pickle', mode='rb')
t_data = pickle.load(f)

Ошибка:


File "C:\Python27\lib\pickle.py", line 1378, in load
return Unpickler(file).load()
File "C:\Python27\lib\pickle.py", line 858, in load
dispatch[key](self)
File "C:\Python27\lib\pickle.py", line 1217, in load_build
setstate(state)
TypeError: must be char, not unicode

Данные представляют собой массив dicts, вложенных не более двух глубоких, например:


{'key3': '3', 'key2': 1.1, 'key1': 1, 'dict': {'dkey2': 2, 'dkey1': 1}}

Что (возможно) происходит здесь неправильно? Есть ли простой способ увидеть, что в исходном (большом) наборе данных вызывает проблему?

спросил(а) 2012-02-26T00:13:00+04:00 8 лет, 8 месяцев назад
1
Решение
70

Рассол не так хорош, как может выглядеть. Уязвимости системы безопасности и многие проблемы, подобные этим.

Лучше всего создать свой собственный формат сохранения, например, с помощью json.

ответил(а) 2012-02-26T00:19:00+04:00 8 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема