Python函数显式返回None但doctest提示无返回值的问题
问题分析与解决方案
我一眼就看出问题出在你的doctest写法上!当Python函数返回None时,在交互式环境里调用它不会产生任何输出,但你在测试用例里却预期输出None,这就导致doctest报错说“Got nothing”。
举个简单的例子验证这个行为:
>>> def return_none(): ... return None ... >>> return_none() >>> # 这里没有任何输出
你的测试用例写了:
>>> find_triple([6,11,7,2,3]) None
但实际调用返回None的函数不会有任何输出,doctest会认为预期输出是None,但实际没有内容,因此失败。
正确的测试方案
有两种可靠的方式来测试函数是否返回None:
方案1:检查返回值是否为None(推荐)
沿用你前两个测试用例的风格,用判断语句来验证返回值,这样更严谨清晰:
>>> find_triple([6,11,7,2,3]) is None True >>> find_triple([1, 1, 3]) is None True
方案2:保留空输出的测试用例
如果你希望保持测试用例的直观性,可以去掉预期的None,留空行:
>>> find_triple([6,11,7,2,3]) >>> find_triple([1, 1, 3])
不过这种方式可读性稍差,不如第一种方案明确。
额外的小提示
你的yield_pair生成器逻辑是高效且正确的:它只生成i < j的元素对,因为x + y和y + x的求和结果一致,这样避免了重复计算,完全符合需求。第一个测试用例里检查返回值是否在[(4,5), (5,4)]里也合理,因为(4,5)是生成器会返回的有效对,测试会正常通过。
内容的提问来源于stack exchange,提问作者Wang Wenjun
相关产品推荐
相关产品推荐

