Я пытаюсь написать программу Python, которая работает как в Python 2.7, так и в Python 3. *. У меня есть случай, когда я использую StringIO
, и согласно Python-Future's cheatsheet on StringIO
, все, что мне нужно, это использовать модуль Python 3-style io
.печать плакатов на io.StringIO в Python 2/3
Проблема заключается в том, что я print
ING floats
StringIO
к этому:
from __future__ import print_function
from io import StringIO
with StringIO() as file:
print(1.0, file=file)
Это приводит к
TypeError: string argument expected, got 'str'
Когда я заменить 1.0
на u"AAAA"
(или "AAAA"
с unicode_literals
включен), его работает отлично.
Альтернативы я пробовал:
BytesIO
. Я не могуprint
, потому что «unicode
не поддерживает интерфейс буфера»."{:f}".format(...)
каждыеfloat
. Это возможно, но громоздко.file.write(...)
вместоprint(..., file=file)
. Это работает, но на данный момент я не вижу, что использованиеprint()
больше.
Есть ли другие варианты?
"* Я не вижу, чтобы использование' print() 'больше *": почему это будет проблемой? Почему бы не использовать 'file.write()'? BTW: плохая идея иметь переменную, называемую 'file' в Python 2, потому что она маскирует предоставленную системой функцию (не связанную с вашей проблемой). – cdarke
Почему не просто 'u" {} ". Format (что угодно)' –
@cdarke Разве 'print' не должно быть удобством? Разве нет способа восстановить его удобное использование в сочетании с 'StringIO'? Мне очень не нравится иметь более одного способа записи в файл, а 'print' в настоящее время является наиболее читаемым способом этого. –