Проблемы Unicode при использовании ввода-вывода.StringIO для макета файла

Я использую io.StringIO объект для макета файла в модульном тесте для класса. Проблема в том, что этот класс, похоже, ожидает, что все строки будут unicode по умолчанию, но builtin str не возвращает строки unicode:

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

но

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

строительство. Я предполагаю, что это связано с тем, что конкатенация со строкой unicode также делает результат unicode. Есть ли более элегантное решение этой проблемы?

1 ответов


пакета IO предоставляет питон3.X совместимости. В python 3 строки по умолчанию являются unicode.

ваш код отлично работает со стандартным пакетом StringIO,

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

Если вы хотите сделать это способом python 3, Используйте unicode () вместо str (). Вы должны быть откровенны здесь.

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