2010-09-20 8 views
9

Ich verwende ein io.StringIO Objekt, um eine Datei in einem Unit-Test für eine Klasse zu verhöhnen. Das Problem ist, dass diese Klasse scheint alle Strings erwarten standardmäßig Unicode, aber die eingebaute str kehrt nicht Unicode-Strings:Unicode-Probleme bei Verwendung von io.StringIO zum Mock einer Datei

>>> 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 einer Unicode-Zeichenfolge das Ergebnis ebenfalls Unicode macht. Gibt es eine elegantere Lösung für dieses Problem?

Antwort

9

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

Ihr Code funktioniert gut mit dem Standard StringIO Paket,

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

Wenn Sie es die Python 3 Art und Weise tun möchten, verwenden Sie Unicode() anstelle von str(). Du musst hier explizit sein.

>>> io.StringIO().write(unicode((1,2))) 
6