TypeError: дескриптор «write» требует объект «_io.BytesIO», но получил «str» - PullRequest
0 голосов
/ 06 мая 2019

Я использую Python pickling для сериализации данных и записи в поток. (и затем читать из потока Код показан ниже:

import pickle
import io
import pprint

class SimpleObject:

    def __init__(self, name):
        self.name = name
        self.name_backwards = name[::-1]


data = []
data.append(SimpleObject('pickle'))
data.append(SimpleObject('preserve'))
data.append(SimpleObject('last'))

print (type(data))

# simulate a file
out_s = io.BytesIO

print (type(out_s))

for o in data:
    print('WRITING : {} ({})'.format(o.name, o.name_backwards))
    # writing to the stream
    print (type(o))
    pickle.dump(o, out_s)
    out_s.flush() 

при записи в поток я получаю сообщение об ошибке -

    pickle.dump(o, out_s)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1370, in dump
    Pickler(file, protocol).dump(obj)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 224, in dump
    self.save(obj)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 704, in save_inst
    write(MARK)
TypeError: descriptor 'write' requires a '_io.BytesIO' object but received a 'str'

когда я печатаю тип (o) - он печатает его как экземпляр (SimpleObject)

WRITING : pickle (elkcip)
<type 'instance'>

Итак, почему я получаю эту ошибку и как это исправить?

...