В python 3 я пишу
s = '\u0300'
и я получаю один символ Unicode, но это не работает в python2, я получаю строку из различных символов.
python2, похоже, хочет:
s = u'\u0300'
так что я должен проверить sys.version_info
, чтобы узнать, использую ли я python 2 или 3, и использовать первый или второй соответственно.
Есть ли способ написать задание таким образом, чтобы он работал в обеих версиях?
Python 3 (начиная с 3.3 IIRC) поддерживает строковые литералы u''
. Или вы можете использовать
from __future__ import unicode_literals
для получения строковых литералов, совместимых с Python3, в Python 2. Этот оператор не работает в Python 3.
Наиболее совместимый способ - использовать модуль six
или аналогичную прокладку совместимости:
import six
s = six.u('\u0300')
six
доступен на PyPI, очень широко используется и хорошо протестирован.
Другая альтернатива:
from __future__ import unicode_literals
s = '\u0300'
Но это может противоречить ряду ожиданий Python 2 о том, что строковые элементы могут содержать байты. При включенном unicode_literals
строковые литералы будут молча, почти волшебным образом преобразованы в строки Unicode. Культура Python часто отдает предпочтение явному, а не неявному.
из будущее импортировать unicode_literals (нужно отредактировать)