Вы говорите: " Это может быть неочевидно, но если вы использовали StringIO для обработки двоичных данных, вам не повезло с Python 2.7 или новее ".
Это не очевидно, потому что это не так.
Если у вас есть код, который работает на 2.6 или более ранней версии, он продолжает работать на 2.7 . Неотредактированный дамп экрана (перенос окна командной строки Windows на столбец 80 и все):
C:\Users\John>\python26\python -c"import sys,StringIO;s=StringIO.StringIO();s.wr
ite('hello\n');print repr(s.getvalue()), sys.version"
'hello\n' 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)]
C:\Users\John>\python27\python -c"import sys,StringIO;s=StringIO.StringIO();s.wr
ite('hello\n');print repr(s.getvalue()), sys.version"
'hello\n' 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)]
Если вам нужно написать код, работающий на 2.7 и 3.x, используйте класс BytesIO
в модуле io
.
Если вам нужна / нужна единая кодовая база, поддерживающая 2.7, 2.6, ... и 3.x, вам придется работать немного тяжелее. Использование модуля six должно очень помочь.