У заданного объекта нет атрибута «закодировать» в модуле сокета - PullRequest
0 голосов
/ 12 мая 2018

Я пытался закодировать заданный объект, но ему это не удалось, требуя код AttributeError. Есть ли способ, чтобы это сработало?

ПРИМЕЧАНИЕ. Я использовал модуль сокета.

albums = set()
for key, val in data.items():
    albums.add(val['album'])
msg = albums.encode()

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Здесь есть несколько вариантов, но, вероятно, проще всего закодировать ваш словарь с использованием протокола Python pickle .

Для этого используйте код отправки , например:

import pickle
data_to_send = pickle.dumps(albums)
mysocket.send(data_to_send)

и код получения , например:

import pickle
albums = pickle.loads(data_received_from_socket)

Тем не менее, я хочу предупредить вас: использование модуля socket вообще может быть червем.Это низкий уровень и предназначен для опытных программистов.По сравнению с вопросом, который вы только что задали, другие проблемы, с которыми вам придется столкнуться, вероятно, намного сложнее.Например, вам нужно подумать о как разделить ваши сообщения , прежде чем вы поймете, что передать в качестве второго параметра в socket.recv (параметр bufsize).

Я предлагаюВы пробуете что-то более высокого уровня, например, модули Python xmlrpc.

0 голосов
/ 12 мая 2018

Вы пытаетесь отправить какую-либо форму представления albums через сокет? Затем вам нужно сначала двоичное представление этого объекта. Использование .encode() предполагает, что вам нужно строковое представление albumns, которое вы можете получить, используя msg = repr(albums).encode().

...