pytest无法在Python 2.7下的README中处理doctest中的Unicode

时间:2018-06-14 14:41:14

标签: python python-2.7 unicode pytest doctest

我有一个README.rst文件,其中包含我的Python库的几个doctests。它们都有效,除了上一个doctest,print的Unicode输出,用UTF-8编码:

Here is a failing example::

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

(使用print而不仅仅是一个字符串对我的实际用例非常重要,因为真正的字符串包含嵌入的换行符,我需要展示不同行上的内容是如何对齐的。)< / p>

运行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下运行不会改变任何内容;也没有将doctest_encoding = utf-8添加到[pytest]的{​​{1}}部分。我看不到与我的困境有关的doctest选项。如何让测试在Python 2.7下成功运行?

更新:在pytest 3.6.2中修复了导致此问题的错误。

1 个答案:

答案 0 :(得分:2)

是的,print是罪魁祸首。例外中最有趣的部分是:

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

本地/ LIB / python2.7 /站点包/ _pytest / doctest.py:509:

pytest尝试解码unicode,因此Python首先尝试对其进行编码 - 然后失败。我认为这是pytest中的一个错误:它应该测试result是字节还是unicode:

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

请向pytest问题跟踪器报告。您可以测试修复程序以及是否可以 你可以发送拉动请求。