Ich versuche, ein Python-Programm zu schreiben, das in Python 2.7 und Python 3 funktioniert. *. Ich habe einen Fall, wo ich StringIO
verwenden, und nach Python-Future's cheatsheet on StringIO
, alles, was ich habe, ist, das Python 3-style io
Modul zu verwenden.Drucken schwebt auf io.StringIO in Python 2/3
Das Problem ist, dass ich print
ing floats
dieser StringIO
:
from __future__ import print_function
from io import StringIO
with StringIO() as file:
print(1.0, file=file)
Dies führt zu
TypeError: string argument expected, got 'str'
Wenn ich ersetzen 1.0
durch u"AAAA"
(oder "AAAA"
mit unicode_literals
aktiviert ist), es funktioniert gut.
Alternativen Ich habe versucht:
BytesIO
. Ich kann nicht mehrprint
, weil "unicode
die Pufferschnittstelle nicht unterstützt"."{:f}".format(...)
allefloat
. Dies ist möglich, aber umständlich.file.write(...)
anstelle vonprint(..., file=file)
. Das funktioniert, aber an dieser Stelle sehe ich nicht mehr, wasprint()
mehr ist.
Gibt es noch andere Optionen?
"* Ich sehe die Verwendung von' print() 'nicht mehr *": Warum sollte das ein Problem sein? Warum nicht 'file.write()' verwenden? BTW: schlechte Idee, eine Variable namens 'file' in Python 2 zu haben, weil sie eine vom System bereitgestellte Funktion maskiert (nicht mit Ihrem Problem verbunden). – cdarke
Warum nicht einfach "u" {} ". Format (was auch immer)' –
@cdarke Ist 'print' nicht als Bequemlichkeit gedacht? Gibt es nicht eine Möglichkeit, die bequeme Verwendung in Verbindung mit 'StringIO' wiederherzustellen? Ich mag es wirklich nicht, mehr als eine Möglichkeit zu haben, in eine Datei zu schreiben, und 'print' ist derzeit der beste Weg, dies zu tun. –