14

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 的文档测试呢?

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 回答