Frage

Ich habe ein Python-Modul mit Docstrings in Klassenmethoden und ein Beispiel in der realen Welt im Modul docstring. Die Unterscheidung ist, dass die Methoden-Docstrings sorgfältig so gestaltet wurden, dass sie völlig wiederholbare Tests sind, während das Beispiel der realen Welt nur eine Kopie der Geschichte von einer Linux-Shell ist-die zufällig den Python-Dolmetscher aufrief.

Z.B

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

Ich möchte die Doktor in SomeClass.someMethod, aber nicht im Docstrings des Moduls.

Doctest's +SKIP Die Richtlinie funktioniert nur pro Zeile, was bedeuten würde, dass 10s Zeilen zu meinem Beispiel für reale Welt hinzugefügt werden. Hässlich!

Gibt es eine Möglichkeit, Doctest einen ganzen Block zu überspringen? Ein bisschen wie <!-- ... --> In HTML?

War es hilfreich?

Lösung 2

Meine Lösung war es, den 3-Charakter zu trimmen >>> und ... Führungskräfte, bei denen ich möchte, dass sie sie überspringen und sie 2-Charakter machen.

So

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

wurde

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

Epydoc zeigt dies nicht so gut wie dokt, aber ich kann damit leben. Eine Skip-bis-Further-Notice-Richtlinie in Doctest wäre jedoch willkommen.

Andere Tipps

Wickeln Sie das Beispiel in eine Funktion und überspringen Sie dann den Funktionsaufruf:

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

Wenn es keineswegs eine tatsächliche Doktor ist, können Sie den Wert einer Variablen nur zuweisen. Zum Beispiel,

example_usage = """
Real-world example:

# python2.5
...
"""

wird dazu führen, dass dieser "Test" nicht bewertet wird.

Es könnte besser sein zu verwenden __example_usage__ (oder etwas anderes, das von Double-Abscores umgeben ist), so dass klar ist, dass dies eine "magische" Variable ist und keine Variable, die im Kontext des Skripts verwendet werden kann.

Ein kleines Problemumgehungsgebäude auf Robms Antwort Bewahrt die Anzeige/Formatierung, indem das Beispiel mit einem >>> so starten:

""" 
>>>
>> from packagename import module 
>> module.show_real_world_usage() 
'Hello world!' 
"""
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top