2010-11-05 18 views
8

Estoy tratando de convertir una biblioteca de Python hecha para Python 2 a Python 3, here is the code.Python 2 a 3 bytes/error de cadena

Tengo un error en la línea 152. En la versión Py2, la función es:


def write(self, data): 
    self._write_buffer += data 

El error es:

TypeError: Can't convert 'bytes' object to str implicitly

He descubierto que tengo para decodificar la variable, así que cambié la función a:


def write(self, data): 
    self._write_buffer += data.decode('utf8') 

Funciona, pero tengo otro error en la biblioteca asyncore que dice que

(the Type) must be bytes or buffer, not str

Entonces, ¿qué puedo hacer?

+0

Entonces, ¿cuál es el problema exactamente entonces? –

Respuesta

5

Debe tener claro dónde quiere los bytes y dónde desea las cadenas. Si simplemente agrega decode y encode donde aparecen los errores, jugará whack-a-mole. En su caso, está escribiendo una implementación de socket. Los sockets se ocupan de los bytes, no de las cadenas. Así que creo que tu _write_buffer debería ser un objeto de bytes, no una cadena como la tienes ahora.

Línea 91 debe cambiar a:

self._write_buffer = b'' 

A continuación, se puede trabajar desde allí para asegurarse de que utiliza bytes en todas partes.

+0

Ok, gracias. Ese fue el problema. Todavía tengo algunos errores, pero intentaré corregir mi archivo para usar los bytes donde sea necesario. –