Python Numpy数组比较报错:断言失败与类型不兼容问题求助
问题解决方法
核心问题分析
- 类型不匹配:你的
arrayOne是字符串列表(通过append构建),但arrayTwo被转成了字符串(str(sheetNames)把列表转成了类似"['Sheet1', 'Sheet2']"的文本),直接用==比较列表和字符串必然失败。 - 用错工具:
np.testing.assert_allclose是用于数值数组(如浮点型数组)的近似相等校验,完全不适合字符串列表的比较,因此触发类型错误。
修正步骤
1. 修正arrayTwo的格式,生成与arrayOne结构一致的列表
不要将sheetNames转成字符串,而是遍历工作表名,生成和arrayOne相同的"序号 - 名称"格式:
excelTitle = download_path + "/" + context.pageobject.anotherLocator().text.strip() excelWorkbook = o.load_workbook(excelTitle) sheetNames = excelWorkbook.sheetnames # 生成和arrayOne格式匹配的列表 arrayTwo = [f"{idx+1} - {name}" for idx, name in enumerate(sheetNames)] print("The sheetnames are: ", arrayTwo)
2. 修正arrayOne的索引逻辑(可选但更可靠)
原代码用something.index(div)获取索引,如果something中有重复元素,会返回第一个匹配项的索引,导致序号错误。改用enumerate按顺序计数更稳妥:
something = context.pageobject.method() arrayOne = [] # 从1开始计数 for idx, div in enumerate(something, start=1): finalSomething = f"{idx} - {div.text}" arrayOne.append(finalSomething) print(arrayOne)
3. 使用普通断言比较两个列表
现在两个变量都是结构一致的字符串列表,直接用Python原生断言即可:
assert arrayOne == arrayTwo, f"数组不匹配:预期{arrayOne},实际{arrayTwo}"
额外提示
避免使用global变量,直接在代码块内初始化列表(如上面修正后的arrayOne代码),可以减少变量作用域带来的潜在问题。
内容的提问来源于stack exchange,提问作者Faith Berroya
相关产品推荐
相关产品推荐

