次の(ナンセンスな)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: ' ...'
。
doctestは文書化を目的としており、モジュールがどのように使用されるかを読者に示すため、私がしたくないのは、出力を抑制するappend_to(L)
ような行に変更することです。_ = append_to(L)
(文書化されている場合はappend_to
、関数のようではなく、ステートメントのように使用する必要があります。書く_ = append_to(L)
と、読者はこれから逸脱します。)