2010-09-20 14 views
9

Estoy usando un objeto io.StringIO para simular un archivo en una prueba de unidad para una clase. El problema es que esta clase parece esperan que todas las cadenas que se van Unicode por defecto, pero la orden interna str no devuelve cadenas Unicode:Problemas Unicode al usar io.StringIO para simular un archivo

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

Pero

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

obras. Supongo que esto se debe a que la concatenación con una cadena Unicode también hace que el resultado sea Unicode. ¿Hay una solución más elegante para este problema?

Respuesta

9

El paquete io proporciona compatibilidad con python3.x. En python 3, las cadenas son unicode por defecto.

Su código funciona bien con el paquete estándar StringIO,

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

Si desea hacerlo de la manera Python 3, utilizan Unicode() en lugar de str(). Tienes que ser explícito aquí.

>>> io.StringIO().write(unicode((1,2))) 
6 
Cuestiones relacionadas