You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Numpy数组比较报错:断言失败与类型不兼容问题求助

问题解决方法

核心问题分析

  1. 类型不匹配:你的arrayOne是字符串列表(通过append构建),但arrayTwo被转成了字符串(str(sheetNames)把列表转成了类似"['Sheet1', 'Sheet2']"的文本),直接用==比较列表和字符串必然失败。
  2. 用错工具: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:05:22