Лучший способ портировать через Python 2,7-байтовые строки на Python 3 - PullRequest
0 голосов
/ 08 мая 2019

В настоящее время я портирую код Python 2.7 на Python 3, и у меня возникают проблемы с определением наилучшего подхода для обработки строк.

У меня есть скрипты Python, которые имеют следующий импорт:

from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from __future__ import unicode_literals

Теперь, поскольку unicode_literals преобразует все мои строки в скриптах Python 2.7, в моем скрипте появляются такие ошибки:

TypeError: expecting a string or number, unicode found
TypeError: Argument 'key' has incorrect type (expected str, got unicode)

Теперь я могу избавиться от ошибок в Python2.7, просто добавив.encode ('utf-8') для каждой строки.Например:

scanline_node['projection_mode'].setValue("uv")
TypeError: expecting a string or number, unicode found
scanline_node['projection_mode'].setValue("uv".encode('utf-8'))

Моя проблема в том, что, когда я начинаю использовать Python 3, это не сработает, потому что это сделает тип строки байтами.

Мой вопрос заключается в том, чтолучший способ справиться с этим типом проблемы, чтобы мой код работал на Python 2.7 и Python 3?Должен ли я просто использовать встроенный str ()?

Спасибо!

Джаред

1 Ответ

1 голос
/ 08 мая 2019

Вы должны использовать библиотеку six .Это помогает коду работать как на Python 2, так и на 3. Шесть содержит тип с именем six.text_type, который равен unicode на Python 2 и str на Python 3. Затем вы можете использовать его в качестве типаваша функция ожидает.

...