【发布时间】:2010-10-05 09:12:27
【问题描述】:
以下(废话)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) 会使读者偏离这一点。)
【问题讨论】: