You need to enable JavaScript to run this app. 调用preprocess函数触发非list类型AssertionError的排查与解决
优惠活动
大模型
产品
解决方案
定价
更多

调用preprocess函数触发非list类型AssertionError的排查与解决

报错根因

这个断言报错和preprocess函数的返回逻辑完全无关,核心是测试断言方法的语义用错了:
self.assertIs(a, b) 的判断逻辑等价于 a is b,作用是校验两个对象在内存中是否为同一个引用、完全等同的对象。你当前代码里写的 self.assertIs(pre[i], list),本质是在判断“pre[i]这个列表实例是不是等于list这个类本身”——哪怕pre[i]是结构完全正确的列表,这个判断也永远为False,自然会触发断言失败。
从报错信息里打印的列表内容、还有你代码里单独输出的type(pre[i])结果来看,preprocess返回的元素确实是标准列表结构,业务逻辑没有问题。你可以在测试环境里实际跑一下 [1,2,3] is list,返回值就是False,和当前报错场景完全一致。

可落地的解决方法

根据你“校验pre[i]的数据类型为list”的测试本意,任选其一调整断言逻辑即可:

  • 替换为专门的实例校验断言:把原有断言行改成 self.assertIsInstance(pre[i], list)。这个方法的作用就是检查传入的对象是不是指定类的实例,完全匹配你的测试需求。
  • 保留类型严格相等的判断逻辑:把原有断言行改成 self.assertEqual(type(pre[i]), list)。和前一种方法的区别是,这种写法不会认可list的子类实例,只会校验对象的类型严格为list,适合需要精确匹配原生list类型的场景。

注意:如果没有特殊的严格类型校验需求,优先使用assertIsInstance,对继承场景的兼容性更好,也是单元测试框架官方推荐的类型校验写法。


内容的提问来源于stack exchange,提问作者Harsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.13 03:45:04