2010-11-05 3 views
8

Je suis en train de convertir une bibliothèque Python faite pour Python 2 en Python 3, here is the code.Python 2 à 3 octets/erreur de chaîne

J'ai une erreur à la ligne 152. Dans la version AP2, la fonction est la suivante:


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

L'erreur est:

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

je trouve que j'ai à décoder la variable, donc je changé la fonction:


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

Il fonctionne, mais j'ai une autre erreur dans la bibliothèque asyncore qui a dit que

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

Alors, que puis-je faire?

+0

Alors, quel est le problème exactement alors? –

Répondre

5

Vous devez être clair sur l'emplacement des octets et l'emplacement des chaînes. Si vous ajoutez simplement decode et encode où les erreurs apparaissent, vous allez jouer whack-a-mole. Dans votre cas, vous écrivez une implémentation de socket. Les sockets traitent des octets, pas des chaînes. Donc je pense que votre _write_buffer devrait être un objet octets, pas une chaîne comme vous l'avez maintenant.

Ligne 91 devrait changer pour:

self._write_buffer = b'' 

Ensuite, vous pouvez travailler à partir de là pour vous assurer d'utiliser tout au long octets.

+0

Ok, merci. C'était le problème. J'ai encore quelques erreurs mais je vais essayer de corriger mon fichier pour utiliser des octets partout où c'est nécessaire. –