为什么使用assert调用自定义lol函数时没有任何输出返回?
问题原因
assert是Python内置的断言校验语句,核心作用是判断表达式的布尔值:
- 当传入的表达式结果为真值(非0、非空、非False等)时,
assert不会产生任何输出,程序直接继续执行 - 只有当表达式结果为假值时,
assert才会抛出AssertionError,并打印你自定义的错误信息
你直接写assert(lol(n))时,只要lol(n)的返回值不是假值,就不会有任何输出,属于正常行为。
解决方法
assert本身没有输出结果的设计定位,如果你需要同时完成「校验函数输出」+「输出返回结果」的需求,可以参考以下写法:
1. 校验通过后打印结果
先把函数返回值存到变量,断言校验通过后手动执行打印:
# 先定义你预期的正确返回值,以n=10为例 expected = ([1], [[1, 2], [2, 3, 5], [5, 7, 10, 15], [15, 20, 27, 37, 52], [52, 67, 87, 114, 151, 203], [203, 255, 322, 409, 523, 674, 877], [877, 1080, 1335, 1657, 2066, 2589, 3263, 4140], [4140, 5017, 6097, 7432, 9089, 11155, 13744, 17007, 21147], [21147, 25287, 30304, 36401, 43833, 52922, 64077, 77821, 94828, 115975]]) result = lol(n=10) # 断言校验结果是否符合预期 assert result == expected, f"结果不符合预期,实际输出为{result}" # 校验通过后打印结果 print(result)
2. 校验失败时输出实际结果
如果只需要在断言不通过时打印返回值,直接把返回值写到断言的错误信息位即可:
expected = 你预期的返回值 assert lol(n=10) == expected, f"函数执行结果不符合预期,实际返回:{lol(n=10)}"
内容的提问来源于stack exchange,提问作者Bruffff
相关产品推荐
相关产品推荐

