我有一个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中修复了导致此问题的错误。
答案 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问题跟踪器报告。您可以测试修复程序以及是否可以 你可以发送拉动请求。