У меня есть функция, которая принимает открытый объект file
и записывает данные так:
def Write(self, file):
file.write("Data")
Теперь я хотел бы протестировать эту функцию, и я подумал, что было бы аккуратно делать это с помощью какого-то потока, который не записывает данные в файл. Я не смог найти класс Python2.7, который выполняет эту работу, кроме класса StringIO. Однако в Python2.7 этот класс ожидает строку unicode в функции записи. (file.write(u"Data"))
Поэтому я не могу проверить свою функцию Write
с помощью класса StringIO
.
В моем обходном пути я создал небольшой фиктивный класс
class MyStream(object):
S = property(lambda self: self._S)
def __init__(self):
self._S = ""
def write(self, s):
self._S += s
с которым я могу теперь успешно протестировать мою функцию Write
.
Мой вопрос:
Есть ли собственный класс python, который делает тот же трюк?
спасибо заранее для любых предложений
С уважением, Вольтан
Как говорится в документации io
:
Поскольку этот модуль был разработан в основном для Python 3.x, вы должны знать, что все использования "байтов" в этом документе относятся к типу str (из которых байты являются псевдонимами), и все виды использования "text" относятся к типу Unicode. Кроме того, эти два типа не взаимозаменяемы в API io.
т.е. если вы используете бэкпортированную библиотеку Python 3 IO, вам нужно использовать unicode. Однако исходный класс StringIO
, который рассматривает байты (строки Python 2) и принимает их, все еще существует в Python 2.7, он просто не находится в backported io
. Вместо этого он имеет свой собственный модуль, также называемый StringIO
.
TypeError: initial_value must be unicode or None, not str
StringIO
классов в Python 2.7:io.StringIO
иStringIO.StringIO
. Последний принимает как экземплярыstr
экземплярыunicode
.