Ho definito una classe di eccezione SpamException
in un modulo spam
. Ora voglio testare una funzione spam_function
, che solleva questa eccezione. Così ho scritto il seguente doctest.Come testare le eccezioni con doctest in Python 2.xe 3.x?
>>> spam_function()
Traceback (most recent call last):
....
SpamException
Il test ha esito positivo su Python 2.x, ma su Python 3.x il test ha esito negativo. Il seguente test funziona su Python 3.x.
>>> spam_function()
Traceback (most recent call last):
....
spam.SpamException
La notevole differenza qui è l'inclusione del nome del modulo nel nome eccezione. Quindi, come posso scrivere un doctest che funzioni sia su Python 2.x che su 3.x?
non ho notato alcun cambiamento quando si aggiunge '# doctest: + IGNORE_EXCEPTION_DETAIL', cioè mantiene in mancanza sia con Versione Python. Puoi aggiungere un esempio completo? –
Il 'IGNORE_EXCEPTION_DETAIL' funziona non appena la classe di eccezione in questione ha un metodo' __str__' che restituisce una stringa non vuota. Quindi e solo allora la riga di eccezione finale ha due punti, che è necessario affinché la direttiva funzioni. –
Sembra che IGNORE_EXCEPTION_DETAIL ignori anche il messaggio di eccezione, che rimuove gran parte dello scopo di doctest di questi comportamenti. Ma il tipo di eccezione è ancora controllato. ouf! – vaab