Могу ли я изменить тип Enum со строки на байты? - PullRequest
3 голосов
/ 09 марта 2020

Я пытаюсь отправить через сокеты значение Enum, но, независимо от того, что я пытаюсь, оно кодируется как строка (кроме случаев, когда я вручную конвертирую его в байты при вызове socket.send)

class Example(Enum):
    A = b'example'
    B = bytes('example', 'utf8')

Я вызываю метод send из модуля сокетов, где sock - это ранее связанный сокет для сервера

....
conn, addr = sock.accept() 
conn.send(Example.A.name)

, а сообщение об исключении:

a bytes-like object is required, not 'str'

Я прочитал это и некоторые другие ссылки, но я не смог найти ответ.

1 Ответ

5 голосов
/ 09 марта 2020

Enum построен на OrderedDict, поэтому name соответствует key, а value, ну, value. Измените на:

Example.A.value

с типом bytes, в отличие от name с типом строки (A)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...