如何在Python doctest中检查以省略号开头的输出并修复报错?
嘿,我来帮你捋捋这个doctest报错的问题!虽然你没贴具体的错误信息,但我可以给你列几个最容易踩的坑和排查步骤,你可以挨个核对:
1. 先盯紧doctest的输出匹配精度
doctest对输出的匹配是出了名的严格——多一个空格、少一个点、甚至换行符不对都会触发报错。你要确认:
- 你在doctest里写的预期输出
......silence......和方法实际输出的内容完全一致,包括标点、大小写、有没有额外的空格或换行。 - 如果你的方法是用
print()输出内容,那print()默认会在末尾加一个换行符,这时候doctest里的预期要对应上(比如不要在预期里多写换行,也不要漏了实际输出的换行)。
2. 明确方法的输出/返回逻辑
这是很多人踩坑的点,你得先搞清楚你的方法是直接打印内容,还是返回这个字符串:
- 如果是打印输出(用
print()):doctest捕获的是标准输出,所以测试用例要写打印出来的内容,比如:>>> your_activity_check_method() ......silence...... - 如果是返回字符串:那doctest里要写带引号的返回值(Python默认用单引号显示字符串),比如:
>>> your_activity_check_method() '......silence......'
3. 检查doctest的运行姿势
有时候不是测试用例的问题,是运行方式不对:
- 如果你用
python -m doctest your_script.py运行,要确保你的方法是可直接调用的——比如不要把方法藏在if __name__ == "__main__"块里(当然如果测试用例也在这个块里也能跑,但最好把测试文档字符串直接写在方法定义里)。 - 确认你在测试用例里的方法调用是对的,比如方法需要参数的话,有没有漏传?
4. 看报错信息找线索
如果上面的都排查完还是有问题,把具体的报错信息贴出来会更高效!比如常见的报错会像这样:
Failed example: your_activity_check_method() Expected: ......silence...... Got:
这种情况说明方法根本没输出任何内容;如果Got是别的字符串,那就是实际输出和预期不匹配,对着改就行。
举个正确的例子参考:
如果你的方法是打印无活动状态:
def check_activity(): """ Checks for active operations, outputs silence if none. >>> check_activity() ......silence...... """ print("......silence......")
运行python -m doctest your_script.py就能通过测试。
内容的提问来源于stack exchange,提问作者Sam Chats
相关产品推荐
相关产品推荐

