gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:49:39 25 4
gpt4 key购买 nike

我有一个 README.rst 文件,其中包含我的 Python 库的多个文档测试。它们都可以工作,除了最后一个 doctest,它打印以 UTF-8 编码的 Unicode 输出:

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

tox.ini 中设置 setenv = LC_ALL=en_US.UTF-8 并在 tox 下运行不会改变任何内容;将 doctest_encoding = utf-8 添加到 tox.ini[pytest] 部分也不会。我没有看到与我的困境相关的文档测试选项。如何让测试在 Python 2.7 下成功运行?

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

最佳答案

是的,print 是罪魁祸首。该异常最有趣的部分是:

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

local/lib/python2.7/site-packages/_pytest/doctest.py:509:

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

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

请将其报告给 pytest 问题跟踪器。您可以测试该修复是否成功您可以发送拉取请求。

关于python - pytest 无法在 Python 2.7 下处理 README 中 doctest 中的 Unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50860112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com