首页 文章

如何使用Sphinx doctest测试非ASCII字符的输出?

提问于
浏览
1

我不知道如何使用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 回答

  • 2

    我相信这是由于你的 from __future__ import unicode_literals 声明 . print 将隐式编码Unicode字符串到终端编码 . 缺少终端,Python 2将默认为 ascii 编解码器 .

    如果你跳过一个明确的 print ,它可以使用或不使用import:

    >>> def foo():
    ...  return 'ë'
    ...
    >>> foo()
    '\x89'
    

    要么:

    >>> from __future__ import unicode_literals
    >>> def foo():
    ...  return 'ë'
    ...
    >>> foo()
    u'\xeb'
    

    然后,您可以测试字符串的转义表示形式 .

    您也可以尝试使用 PYTHONIOENCODING=utf8 更改 print 本身的编码 .

相关问题