Python单元测试使用assertAlmostEqual报list不支持减运算错误如何解决
错误原因
assertAlmostEqual 仅支持对数值类型做近似相等校验,底层会对两个输入参数做减法求差值。你直接传入了两个列表作为入参,而列表类型本身不支持减法运算,因此触发了类型错误。
修复方案
你需要遍历两组结果中的对应数据,单独对其中的浮点值做近似校验,修改后的代码示例如下:
def test_method_04(self): self.set_up() actual = self.bookshop.method_4(self.orders) expected = [(1, 678.33),(2, 494.46),(3, 364.8),(4, 492.57)] # 先校验两个列表长度一致,避免索引错位 self.assertEqual(len(actual), len(expected)) # 逐组校验数据 for act, exp in zip(actual, expected): # 校验序号完全相等 self.assertEqual(act[0], exp[0]) # 校验浮点值近似相等 self.assertAlmostEqual(act[1], exp[1], places=2) print("METHOD4 \nACTUAL:") for line in actual: print(line) print("EXPECTED:") for line in expected: print(line)
不要直接用assertEqual校验整个列表,浮点数精度误差可能会导致偶现的校验失败,上述单独对浮点值做近似校验的方案兼容性更强,所有Python版本都可正常运行。
内容的提问来源于stack exchange,提问作者bart
相关产品推荐
相关产品推荐

