gpt4 book ai didi

python - 在 doctest 中包含原始制表 rune 字字符

转载 作者:行者123 更新时间:2023-12-03 16:20:10 25 4
gpt4 key购买 nike

我不知道如何避免这个 doctest 错误:

Failed example:
print(test())
Expected:
output
<BLANKLINE>
Got:
output
<BLANKLINE>
对于此代码
def test():
r'''Produce string according to specification.

>>> print(test())
output
<BLANKLINE>
'''
return '\toutput\n'
我在源代码中添加了一个制表符,在 output 前面的第 5 行.
看起来 doctest(或 python docstrings?)忽略了该选项卡文字并将其转换为四个空格。
所谓的“预期”值实际上并不是我的消息来源指定的值。
对此有什么解决方案?
我不想用
>>> test()
'\toutput\n'
因为我通常喜欢 doctests 的很大一部分原因是因为它们演示了示例,而我正在编写的这个函数中最重要的部分是输出的形状。

最佳答案

文档字符串中的制表符扩展为 8 个空格,但输出中的制表符未扩展。
来自 doctest documentation (强调):

All hard tab characters are expanded to spaces, using 8-column tab stops. Tabs in output generated by the tested code are not modified. Because any hard tabs in the sample output are expanded, this means that if the code output includes hard tabs, the only way the doctest can pass is if the NORMALIZE_WHITESPACE option or directive is in effect. Alternatively, the test can be rewritten to capture the output and compare it to an expected value as part of the test. This handling of tabs in the source was arrived at through trial and error, and has proven to be the least error prone way of handling them. It is possible to use a different algorithm for handling tabs by writing a custom DocTestParser class.


不幸的是,所有在 doctest 文档中使用指令的例子都是 mangled by Sphinx .以下是您将如何使用 NORMALIZE_WHITESPACE :
def test():
r'''Produce string according to specification.

>>> print(test()) # doctest: +NORMALIZE_WHITESPACE
output
<BLANKLINE>
'''
return '\toutput\n'
请注意,这会将所有空白运行视为相等,而不是禁用制表符处理。禁用选项卡处理非常麻烦,通过通常的 doctest 界面是不可能的 - 您需要子类化 DocTestParser ,手动重新实现 doctest 解析,然后构造 DocTestFinder 的实例, DocTestRunner ,以及您的 DocTestParser子类化并手动调用它们的方法。

关于python - 在 doctest 中包含原始制表 rune 字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64408338/

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