14

SpamExceptionmodule に例外クラスを定義しましたspamspam_functionここで、この例外を発生させる関数をテストしたいと思います。そこで、次の doctest を書きました。

>>> spam_function()
Traceback (most recent call last):
    ....
SpamException

テストは Python 2.x では成功しますが、Python 3.x では失敗します。次のテストは Python 3.x で動作します。

>>> spam_function()
Traceback (most recent call last):
    ....
spam.SpamException

ここでの注目すべき違いは、例外名にモジュール名が含まれていることです。では、Python 2.x と 3.x の両方で動作する doctest を作成するにはどうすればよいでしょうか?

4

1 に答える 1

9

doctest.IGNORE_EXCEPTION_DETAIL次のように、ディレクティブをオンにします。

>>> spam_function() # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last)
    ...
SpamException: 'lovely spam'

ただしIGNORE_EXCEPTION_DETAIL、単純な例外オブジェクト (関連付けられた引数がない) では機能しないことに注意してください。特に、次の例は、例外名の後に何もないため、Python 3 に移植できません。

>>> spam_function() # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last)
    ...
SpamException
于 2013-08-22T16:05:27.740 に答える