Merci. Je craignais déjà qu'il n'y ait aucun moyen de contourner le code en dehors de la docstring. Pourtant, je pensais qu'il pourrait y avoir un truc pour importer les locaux d'une fonction et ainsi avoir accès à des fonctions imbriquées. Quoi qu'il en soit, une solution utilisant l'approche « Alex lirait
def foo(debug=False):
"""
>>> foo()
testfoo
>>> foo(debug=True)
"""
def foo2():
"""
>>> 1/0"""
print 'testfoo'
if debug :
import doctest
for f in [foo2]: doctest.run_docstring_examples(f,locals())
foo2()
Maintenant, la seule question est de savoir comment automatiser cette approche, si l'on a quelque chose comme
for f in locals().values(): doctest.run_docstring_examples(f,locals())
mais sans les produits importés et construit dans les fonctions et les variables .
Ceci est une faute de frappe et obscurcit mon intention: Je veux passer le test __NOT__ .. Je veux obtenir quelque chose comme "ZeroDivisionError: division entière ou modulo par zéro" en raison de la chaîne doctest dans foo2. La question est de savoir comment doctest sous-routines. –
Ah, je vois. La docstring d'une fonction ** nested ** n'est pas visible là où l'objet de fonction (imbriqué) n'existe pas - et dans votre code, l'objet de fonction pour foo2 n'existe que pendant l'exécution de la fonction externe foo. (Dans le cas normal de fermeture-usine où la fonction externe * renvoie * l'objet de fonction interne, plutôt que de simplement l'utiliser en interne comme détail d'implémentation, vous avez bien sûr plus d'options). Fondamentalement, cela doit être le travail de foo de faire en quelque sorte remonter la docstring cachée de foo2, parce que personne d'autre ne peut le faire (foo2 n'existe pas ** pour tout le monde!). –