Python doctest: Skip entire block?

RobM picture RobM · Nov 27, 2009 · Viewed 7.3k times · Source

I've got a Python module with docstrings in class methods, and a real-world example in the module docstring. The distinction is that the method-docstrings have been carefully crafted to be utterly repeatable tests, while the real-world example is just a copy'n'paste of the history from a Linux shell - which happened to invoke the python interpreter.

E.g.

"""
Real-world example:

# python2.5
Python 2.5 (release25-maint, Jul 20 2008, 20:47:25)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from packagename import module
>>> module.show_real_world_usage()
'Hello world!'
"""

class SomeClass(object):
    def someMethod(self):
        """
        >>> 1 == 1
        True
        """

I want to run the doctest in SomeClass.someMethod, but not in the module's docstrings.

Doctest's +SKIP directive only works per line, which would mean adding 10s of lines to my real-world example. Ugly!

Is there a way to make doctest skip an entire block? A bit like <!-- ... --> in HTML?

Answer

lambacck picture lambacck · Oct 1, 2011

Wrap the example in a function and then skip the function call:

"""
>>> def example():
...    from packagename import module
...    module.show_real_world_usage()
...
>>> example() # doctest: +SKIP
'Hello world!'
"""