Question

J'ai un module Python avec des méthodes docstrings dans les classes et un exemple concret dans la docstring du module. La différence réside dans le fait que les méthodes-docstrings ont été soigneusement conçues pour être des tests parfaitement répétables, tandis que l’exemple réel n’est qu’un copier / coller de l’historique d’un shell Linux - ce qui est arrivé pour invoquer l’interpréteur python.

ex.

"""
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
        """

Je souhaite exécuter le doctest dans SomeClass.someMethod, mais pas dans la docstrings du module.

La directive +SKIP de Doctest ne fonctionne que par ligne, ce qui signifie que vous devrez ajouter 10 secondes de lignes à mon exemple réel. Moche!

Existe-t-il un moyen de faire en sorte que doctest ignore un bloc entier? Un peu comme <!-- ... --> en HTML?

Était-ce utile?

La solution 2

Ma solution a été d'éliminer les >>> et ... leaders à 3 caractères pour lesquels je veux que doctest les ignore, les transformant en 2 caractères.

Alors

"""
>>> from packagename import module
>>> module.show_real_world_usage()
'Hello world!'
"""

est devenu

"""
>> from packagename import module
>> module.show_real_world_usage()
'Hello world!'
"""

Epydoc n’affiche pas cela aussi bien qu’il fait des doctests, mais je peux vivre avec ça. Une directive de type "sauter jusqu’à nouvel avis" serait cependant la bienvenue.

Autres conseils

Emballez l'exemple dans une fonction, puis ignorez l'appel de fonction:

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

S'il ne s'agit en aucun cas d'un doctest, vous pouvez simplement affecter la valeur à une variable. Par exemple,

example_usage = """
Real-world example:

# python2.5
...
"""

provoquera ce " test " ne pas être évalué.

Il serait peut-être préférable d'utiliser __example_usage__ (ou quelque chose d'autre entouré de doubles soulignements) pour qu'il soit clair que c'est un & "magique &"; variable et non une variable à utiliser dans le contexte du script.

Une petite solution de contournement basée sur la réponse de RobM conserve l'affichage / la mise en forme en commençant par l'exemple avec un > > > comme ça:

""" 
>>>
>> from packagename import module 
>> module.show_real_world_usage() 
'Hello world!' 
"""
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top