pytest не может обработать Unicode в doctest в README под Python 2.7

1

У меня есть файл README.rst содержащий несколько доктрин для моей библиотеки Python. Все они работают, за исключением последнего документа, который print выходные данные Unicode, закодированные в UTF-8:

Here is a failing example::

    >>> print(u'\xE5\xE9\xEE\xF8\xFC')
    åéîøü

(Использование print а не просто строки очень важно для моего фактического использования, так как настоящая строка содержит встроенные строки новой строки, и мне нужно показать, как выравниваются элементы на разных линиях.)

Запуск pytest README.rst успешно работает с Python 3.6.5 и pytest 3.6.1, но под Python 2.7.10 он терпит неудачу с очень длинной трассировкой, которая заканчивается:

input = 'åéîøü
', errors = 'strict'

    def decode(input, errors='strict'):
>       return codecs.utf_8_decode(input, errors, True)
E       UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py:16: UnicodeEncodeError

Установка setenv = LC_ALL=en_US.UTF-8 в tox.ini и работает под tox.ini ничего не меняет; также не добавляет doctest_encoding = utf-8 в [pytest] раздел tox.ini. Я не вижу вариантов доктрины, имеющих отношение к моему бедственному положению. Как я могу запустить тест в Python 2.7?

Обновление: ошибка, связанная с этой проблемой, исправлена в pytest 3.6.2.

Теги:
python-2.7
unicode
doctest
pytest

1 ответ

2
Лучший ответ

Да, print - преступник. Самая интересная часть исключения:

def getvalue(self):
    result = _SpoofOut.getvalue(self)
    if encoding:
        result = result.decode(encoding)

локальные /Library/python2.7/сайт-пакеты/_pytest/doctest.py: 509:

pytest пытается декодировать unicode, поэтому Python пытается сначала его закодировать - и терпит неудачу. Я думаю, что это ошибка в pytest: она должна проверить, является ли result байтами или unicode:

    if encoding and isinstance(result, bytes):
        result = result.decode(encoding)

Пожалуйста, сообщите об этом в журнал отслеживания проблем. Вы можете проверить исправление, и если он работает, вы можете отправить запрос на вытягивание.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню