Поддержка Python 2 и 3: внешние библиотеки, которые возвращают PY2.str - PullRequest
0 голосов
/ 24 февраля 2020

Я работаю над пакетом Python, который должен поддерживать PY3 и Iron Python :(. До сих пор поддержка IPY была исправлена ​​в качестве доказательства концепции. Применение байт-массивов, где 'bytes' vs 'str' будет Для решения большинства наших проблем было достаточно, и большая часть кода была написана с учетом других тем о совместимости. Теперь мы хотим разобраться с этим более чисто и смотрим на такие вещи, как pasteurize , six , et c.

Мой коллега раздвоил пастеризацию и более подробно рассматривает вопрос о добавлении дополнительных фиксаторов, адаптированных к некоторым из наших потребностей. В настоящее время это автоматизирует многие вещи, но Существует одна общая проблема, и я хотел бы знать, есть ли рекомендуемый подход для ее обработки.

Возьмите следующий код:

from __future__ import print_function
from __future__ import unicode_literals

from builtins import bytes, str
import struct

print(type(struct.pack('>H', 0x31)))
# ipy: <type 'str'>
# py3: <class 'bytes'>

print(isinstance(struct.pack('>H', 0x31), str))
# ipy: True
# py3: False

#print(bytes(struct.pack('>B', 0x31), 'utf-8'))
# ipy: b'1'
# py3: error on py 3 - pack returns bytes not str

Мы хотим, чтобы все наши данные низкого уровня быть байтами (<class 'future.types.newbytes.newbytes'> на МПГ), но поскольку мы не можем (и не хотим) применять фьючерсы на стандартные библиотеки, такие как struct.pack, какой подход рекомендуется для решения сценария ios как это чисто, т.е. Используемая библиотека возвращает 'str' для PY2 и байты для PY3, поскольку байты ожидаются в других областях кода, которые вы хотите убедиться в этом. Как мы можем предотвратить проникновение 'str' объектов? Может ли это быть автоматизировано с помощью чего-то, что уже существует? Это просто то, что нужно решить в рамках дизайна API? В идеале, люди, работающие над кодом, должны иметь Python 3 опыта и некоторые общие знания по темам, чтобы следить за поддержкой МПГ - насколько это возможно, они будут автоматизированы членами команды, которые больше знают о подводных камнях.

...