Python doctest 异常测试处理

6 投票
1 回答
1986 浏览
提问于 2025-04-17 00:43

我在一个叫做 test2.txt 的文件里有以下内容。

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

我用 python -m test2.txt 来运行测试。结果让我很意外。

终端输出的截图

我原以为测试应该是成功的,因为我在 test2.txt 文件里写了预期的输出,而且它和我从控制台输出得到的结果“几乎”是一样的。我尝试添加了 'File "G:\"'.... 这一行,但是测试还是失败了。

1 个回答

11

doctest 对于预期的错误格式非常严格。你漏了一个空格:

Traceback(most recent call last): 应该写成 Traceback (most recent call last):

而且,即使你改了这个,还是会失败,因为你的错误信息太具体了(而且空格也不对)!可以使用 ELLIPSISIGNORE_EXCEPTION_DETAIL 这两个选项,让 doctest 对匹配错误信息不那么挑剔,像这样:

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

(ELLIPSIS 在这里也可以用)

撰写回答