Ich definierte eine Ausnahmeklasse SpamException
in einem Modul spam
. Jetzt möchte ich eine Funktion spam_function
testen, die diese Ausnahme auslöst. Also habe ich den folgenden Doktest geschrieben.Wie testen Ausnahmen mit Doctest in Python 2.x und 3.x?
Der Test ist erfolgreich auf Python 2.x, aber auf Python 3.x schlägt der Test fehl. Der folgende Test funktioniert auf Python 3.x.
>>> spam_function()
Traceback (most recent call last):
....
spam.SpamException
Der bemerkenswerte Unterschied ist hier die Aufnahme des Modulnamens in den Namen der Ausnahme. Wie kann ich einen Doktest schreiben, der sowohl mit Python 2.x als auch mit 3.x funktioniert?
ich keine Veränderung bemerkt haben beim Hinzufügen von '# doctest: + IGNORE_EXCEPTION_DETAIL', dh es ist mit Fehler hält entweder Python-Version. Können Sie ein komplettes Beispiel hinzufügen? –
Das 'IGNORE_EXCEPTION_DETAIL' funktioniert, sobald die betreffende Ausnahmeklasse eine' __str__' -Methode hat, die eine nicht leere Zeichenfolge zurückgibt. Dann und nur dann hat die letzte Ausnahmezeile einen Doppelpunkt, der für die Anweisung benötigt wird. –
Es scheint, dass IGNORE_EXCEPTION_DETAIL auch die Ausnahmebedingungsnachricht ignoriert, die einen großen Teil des Zwecks der Prüfung dieses Verhaltens entfernt. Aber der Ausnahmetyp wird immer noch überprüft. ouf! – vaab