10

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になるためだと思います。この問題に対するより洗練された解決策はありますか?

4

1 に答える 1

10

ioパッケージはpython3.x互換性を提供します。Python 3では、文字列はデフォルトでユニコードです。

コードは標準のStringIOパッケージで正常に機能します。

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

Python 3の方法で実行する場合は、str()の代わりにunicode()を使用してください。ここでは明示する必要があります。

>>> io.StringIO().write(unicode((1,2)))
6
于 2010-09-20T08:58:18.637 に答える