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