>> L = [] >>> if True: ... append_to(L) # XXX >>> L [1] """ def ap-6ren">
gpt4 book ai didi

python - 文档测试 : How to suppress/ignore output?

转载 作者:行者123 更新时间:2023-11-28 22:06:21 31 4
gpt4 key购买 nike

以下(废话)Python模块的doctest失败:

"""
>>> L = []
>>> if True:
... append_to(L) # XXX
>>> L
[1]
"""

def append_to(L):
L.append(1)
class A(object):
pass
return A()

import doctest; doctest.testmod()

这是因为标记为 XXX 的行之后的输出是 <__main__.A object at ...> (由 append_to 返回)。当然,我可以将此输出直接放在标记为 XXX 的行之后,但在我的例子中,这会分散读者对实际测试内容的注意力,即函数 append_to 的副作用。 .那么我该如何抑制该输出或如何忽略它。我试过:

"""
>>> L = []
>>> if True:
... append_to(L) # doctest: +ELLIPSIS
...
>>> L
[1]
"""

def append_to(L):
L.append(1)
class A(object):
pass
return A()

import doctest; doctest.testmod()

然而,这会产生一个 ValueError: line 4 of the docstring for __main__ has inconsistent leading whitespace: ' ...' .

我不想做的是更改行 append_to(L)类似于 _ = append_to(L)这会抑制输出,因为 doctest 用于文档目的并向读者展示模块应该如何使用。(在记录的情况下,append_to 应该像语句一样使用,而不是像函数一样使用。写成 _ = append_to(L) 会使读者偏离这一点。)

最佳答案

rewrite: 现在这确实有效;我意识到我之前写的“doctest”实际上没有被解析为模块文档字符串,所以测试没有通过:它只是没有被运行。

我一定要仔细检查这个。

__doc__ = """
>>> L = []
>>> if True:
... append_to(L) # doctest: +IGNORE_RESULT
>>> L
[1]
""".replace('+IGNORE_RESULT', '+ELLIPSIS\n<...>')

def append_to(L):
L.append(1)
class A(object):
pass
return A()

我不确定这是否符合可读性要求。注意 <...> 没有什么特别的:只有当实际返回值具有这种形式时它才会起作用,就像在这种情况下一样(即它是 <module.A object at 0x...> )。 ELLIPSIS 选项使 ... “匹配实际输出中的任何子串¹ .所以我认为没有办法让它匹配整个输出。

更新:要以“正确”的方式执行此操作,看起来您需要调用 doctest.register_optionflag('IGNORE_RESULT') , 子类 doctest.OptionChecker ,并安排该子类的一个实例供 doctest 使用。大概这意味着通过 $ python -m doctest your_module.py 运行你的 doctest不是一个选项。

关于python - 文档测试 : How to suppress/ignore output?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3862274/

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