如何在Python 2.x和3.x中使用doctest测试异常?

时间:2013-07-16 08:02:27

标签: python exception python-3.x python-2.x doctest

我在模块SpamException中定义了一个异常类spam。现在我想测试一个函数spam_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?

1 个答案:

答案 0 :(得分:7)

我会打开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