Проблемы с Unicode при использовании io.StringIO для макета файла - PullRequest
9 голосов
/ 20 сентября 2010

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

>>> 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 Ответ

9 голосов
/ 20 сентября 2010

Пакет io обеспечивает совместимость с python3.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
...