2011-08-30 14 views
5

Ho il seguente contenuto in un file chiamato test2.txt.python doctest test di gestione eccezioni

>>> def faulty(): 
... yield 5 
... return 7 
Traceback(most recent call last): 
SyntaxError: 'return' with argument inside generator(<doctest test.txt[0]>,line 3) 

Invoco il test eseguito con python -m test2.txt. I risultati qui sotto sono al di fuori delle mie aspettative.

screenshot of terminal output

Il mio pensiero era che il test deve essere successo perché ho scritto l'output previsto nel mio file test2.txt ed e 'quasi' partite quello che ho ottenuto dal l'output della console. Ho provato ad aggiungere il 'File "G:\"'.... line? ma il test è ancora fallito.

risposta

8

doctest è estremamente attento con il formato delle eccezioni previste. Ti sei perso uno spazio:

Traceback(most recent call last): dovrebbe essere Traceback (most recent call last):

Inoltre, questo sarebbe ancora non riescono, come il vostro messaggio traceback è eccessivamente specifico (e ha anche spazi bianchi errato)! Utilizzare i ELLIPSIS o IGNORE_EXCEPTION_DETAIL bandiere per doctest per rendere doctest meno esigenti in fatto di eccezioni corrispondenti, come così:

>>> def faulty(): # doctest: +IGNORE_EXCEPTION_DETAIL 
...  yield 5 
...  return 7 
Traceback (most recent call last): 
SyntaxError: 'return' with argument inside generator (...) 

(ELLIPSIS avrebbe funzionato anche qui)

+0

vi ringrazio molto. Seguo il tuo consiglio per modificare il file di testo iniziale __extremely__ attentamente e ora funziona anche se non ho ancora provato le ** bandiere ** di cui parli. Potrei provare mentre il mio apprendimento si sposta. – Tracy

+0

Vale la pena notare che questo flag fa anche ignorare il messaggio di eccezione. – ony