我正在使用io.StringIO
对象来模拟一个类的单元测试中的文件。问题是这个类似乎希望默认情况下所有字符串都是unicode,但内置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。这个问题有更优雅的解决方案吗?
答案 0 :(得分:9)
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