Unicode Probleme bei der Verwendung von io.StringIO eine Datei zu verspotten
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?
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