Question

J'utilise un objet io.StringIO pour se moquer d'un fichier dans une unité de test pour une classe. Le problème est que cette classe semble attendre toutes les chaînes sont unicode par défaut, mais la str de builtin ne retourne pas les chaînes unicode:

>>> buffer = io.StringIO()
>>> buffer.write(str((1, 2)))
TypeError: can't write str to text stream

>>> buffer.write(str((1, 2)) + u"")
6

fonctionne. Je suppose que cela est dû au fait la concaténation avec une chaîne de caractères Unicode rend le résultat unicode ainsi. Y at-il une solution plus élégante à ce problème?

Était-ce utile?

La solution

Le paquet io est compatible python3.x. En Python 3, les chaînes sont unicode par défaut.

Votre code fonctionne bien avec le package standard StringIO,

>>> from StringIO import StringIO
>>> StringIO().write(str((1,2)))
>>>

Si vous voulez faire le python 3 façon, l'utilisation unicode () au lieu de str (). Vous devez être explicite ici.

>>> io.StringIO().write(unicode((1,2)))
6
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top