>>> foo() {"Hermione": "hippogryph", "Harry": "broomstick"} >>>
è vulnerabile! Invece, la soluzione giusta è
>>> foo() == {"Hermione": "hippogryph", "Harry": "broomstick"} True >>>
Un altro metodo è
>>> d = foo().items() >>> d.sort() >>> d [('Harry', 'broomstick'), ('Hermione', 'hippogryph')]
Ci sono ancora altri metodi ma ormai vi sarete fatti un'idea.
Un'altra cattiva idea è quella di stampare cose che incorporano un indirizzo di un oggetto, come per esempio
>>> id(1.0) # alcune volte potrà fallire 7948648 >>>
I numeri in virgola mobile sono inoltre soggetti a piccole variazioni di output in piattaforme diverse, perché Python differisce dalle librerie C relativamente alla formattazione in virgola mobile e le stesse librerie C differiscono ampiamente in qualità riguardo a questo argomento.
>>> 1./7 # rischiosa 0.14285714285714285 >>> print 1./7 # sicura 0.142857142857 >>> print round(1./7, 6) # molto sicura 0.142857
I numeri nella forma I/2.**J
sono sicuri per tutte le
piattaforme e spesso faccio in modo che gli esempi di doctest producano
numeri in quella forma.
>>> 3./4 # totalmente sicuro 0.75
Inoltre le frazioni semplici sono più facili da capire e sono quindi più indicate per la documentazione.
Se avete codice a livello di modulo che deve essere eseguito una sola volta, una definizione molto semplice di _test() è
def _test(): import doctest, sys doctest.testmod()
'0'
e '1'
risulterà essere 'False'
e
'True'
. Di conseguenza risulterà goffo scrivere una doctest che
visualizzi risultati booleani che superino le molte versioni di
Python. In Python 2.3, in modo predefinito e come caso speciale, se un
blocco di output previsto consiste esclusivamente di '0'
ed
il blocco di output attuale consiste solamente di 'False'
,
il tutto verrà accettato come una corrispondenza esatta e nello stesso
modo anche per '1'
nei confronti di 'True'
. Questo
comportamento può essere eliminato passando come argomento opzionale
optionflags di testmod() la costante DONT_ACCEPT_TRUE_FOR_1
del nuovo modulo (in 2.3). Fra alcuni anni, quando la rappresentazione dei boleani
con interi sarà storia, questa forzatura verrà probabilmente di nuovo rimossa.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.