Frage

Ich verwende eine io.StringIO Objekt eine Datei in einem Unit-Test für eine Klasse zu verspotten. Das Problem ist, dass diese Klasse scheint zu erwarten, dass alle Strings Unicode standardmäßig sein, aber der eingebaute str kehrt nicht Unicode-Strings:

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

Aber

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

funktioniert. Ich nehme an, das liegt daran, dass die Verkettung mit einem Unicode-String als auch das Ergebnis Unicode macht. Gibt es eine elegantere Lösung für dieses Problem?

War es hilfreich?

Lösung

Das io-Paket bietet python3.x Kompatibilität. In Python 3, Strings sind Unicode standardmäßig aktiviert.

Ihr Code funktioniert gut mit dem Standard-Paket StringIO,

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

Wenn Sie wollen, dass es die Python 3 Art und Weise, die Verwendung von Unicode () anstelle von str () zu tun. Sie müssen hier explizit sein.

>>> io.StringIO().write(unicode((1,2)))
6
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top