我不知道如何使用Sphinx doctest测试包含非ASCII字符的打印输出 .
当我测试包含生成非ASCII字符的代码,或者包含包含非ASCII字符的预期结果时,我会遇到编码错误 .
例如,如果我有:
def foo():
return 'γ'
然后是doctest包括
>>> print(foo())
会产生表格的错误
编码错误:'ascii'编解码器无法编码位置0的字符u'\ u03b3':序数不在范围内(128)
对形式的任何测试也是如此
>>> print('')
γ
只有通过确保我的所有函数的结果我都没有尝试 print
,并且没有预期的打印结果包含这些字符,我才能避免这些错误 . 结果我不得不禁用许多重要的测试 .
在我所有代码的头部,我有
# encoding: utf8
from __future__ import unicode_literals
(绝望地)我尝试过这样的事情
doctest_global_setup =(
'#encoding: utf8\n\n'
'from __future__ import unicode_literals\n'
)
和
.. testsetup::
from __future__ import unicode_literals
但这些(当然)不会改变结果 .
如何使用Sphinx doctest测试非ASCI字符的输出?
1 回答
我相信这是由于你的
from __future__ import unicode_literals
声明 .print
将隐式编码Unicode字符串到终端编码 . 缺少终端,Python 2将默认为ascii
编解码器 .如果你跳过一个明确的
print
,它可以使用或不使用import:要么:
然后,您可以测试字符串的转义表示形式 .
您也可以尝试使用
PYTHONIOENCODING=utf8
更改print
本身的编码 .