terça-feira, 6 de setembro de 2016

TypeError: 'str' does not support the buffer interface

Quando comecei a reescrever os códigos de controle de um robô em Python 3, já esperava uma série de erros devido as diferenças entre as versões 2.x e 3.x.

Ao enviar um comando de movimento via socket, recebi o erro:
"TypeError: 'str' does not support the buffer interface"
Após uma breve pesquisa, encontrei a seguinte resposta [1]:
In python 3, bytes strings and unicode strings are now two different types. Since sockets are not aware of string encodings, they are using raw bytes strings, that have a slightly different interface from unicode strings.

So, now, whenever you have a unicode string that you need to use as a byte string, you need to encode() it. And when you have a byte string, you need to decode it to use it as a regular (python 2.x) string.

Unicode strings are quotes enclosed strings. Bytes strings are b"" enclosed strings
Assim, para corrigir o problema, foi necessário converter string em byte, deixando o lado cliente:
roboSocket.send(b"a")
E o lado server (robô):
recebe == (b"a")
Desta forma o comando foi executado perfeitamente.

Links

[1]. Stackoverflow - http://stackoverflow.com/a/11781741

Nenhum comentário: