我不知道如何使用Sphinx doctest测试包含非ASCII字符的打印输出。
当我测试包含生成非ASCII字符的代码或包含非ASCII字符的预期结果时,我会遇到编码错误。
例如,如果我有:
def foo():
return 'γ'
然后是doctest,包括
>>> print(foo())
将产生
形式的错误编码错误: ' ASCII'编解码器不能对字符u' \ u03b3'进行编码。位置0:序数不在范围内(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字符的输出?
答案 0 :(得分:2)
我认为这是由于您的from __future__ import unicode_literals
声明。 print
将隐式地将Unicode字符串编码为终端编码。缺少终端,Python 2将默认为ascii
编解码器。
如果您跳过明确的print
,则无论是否使用导入都可以使用
>>> def foo():
... return 'ë'
...
>>> foo()
'\x89'
或者:
>>> from __future__ import unicode_literals
>>> def foo():
... return 'ë'
...
>>> foo()
u'\xeb'
然后你可以测试字符串的转义表示。
您还可以尝试使用print
更改PYTHONIOENCODING=utf8
本身的编码。