Grazie. Ho già temuto che non ci sarebbe stato modo di aggirare il codice al di fuori della docstring. Tuttavia ho pensato che potrebbe esserci un trucco per importare i locali di una funzione e quindi ottenere l'accesso a funzioni annidate. In ogni caso, una soluzione che utilizza approccio Alex' sarebbe leggere
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()
Ora l'unica domanda è come automatizzare questo approccio, quindi si ha qualcosa come
for f in locals().values(): doctest.run_docstring_examples(f,locals())
ma senza la importato e costruito nelle funzioni e le variabili .
fonte
2010-03-12 10:37:37
Questo è un errore di battitura e offusca la mia intenzione: voglio che il __NOT__ prova da superare .. voglio ottenere qualcosa di simile "ZeroDivisionError: divisione intera o modulo da zero" a causa della stringa di doctest in foo2. La domanda è come doctest subroutine. –
Ah, capisco. La docstring di una ** funzione nidificata ** non è visibile dove l'oggetto funzione (nidificato) stesso non esiste - e nel codice, l'oggetto funzione per foo2 esiste solo durante l'esecuzione della funzione esterna pippo. (Nel normale caso di chiusura-factory in cui la funzione esterna * restituisce * l'oggetto della funzione interna, piuttosto che utilizzarlo internamente come dettaglio di implementazione, ovviamente sono disponibili più opzioni). Fondamentalmente, ** deve ** essere il lavoro di foo per in qualche modo la docstring altrimenti nascosta di foo2, perché nessun altro può farlo (foo2 non esiste ** per nessun altro! -). –