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

使用@pytest.mark.parametrize测试双返回值函数遇断言错误求助

问题排查与修复

错误原因

你使用的pdt.assert_frame_equal是pandas测试工具中专门用来比较两个DataFrame是否相等的断言方法,它仅接受DataFrame类型的参数。但你的函数col_names(test)返回的是包含两个元素的元组(带列名的DataFrame, 列名列表),直接把整个元组传给assert_frame_equal,必然触发类型不匹配错误。

修复方案

需要拆分函数的返回值,分别验证两个结果:

  1. 提取返回元组中的DataFrame部分,用assert_frame_equal和预期的ex1比较
  2. 提取返回的列名列表,用普通断言和ex2比较

修改后的测试代码如下:

@pytest.mark.parametrize(
    "test, ex1, ex2",
    [
        (pd.DataFrame(list(zip([1, 2], [3, 4], [5, 6]))),
         pd.DataFrame({'Col1': [1, 2], 'Col2': [3, 4], 'Col3': [5, 6]}),
         ['Col1', 'Col2', 'Col3']),
    ])
def test_col_names(test, ex1, ex2):
    # 拆分函数返回的元组
    result_df, result_cols = packagename.modulename.col_names(test)
    # 验证DataFrame是否符合预期
    pdt.assert_frame_equal(result_df, ex1)
    # 验证列名列表是否符合预期
    assert result_cols == ex2

额外注意事项

如果测试时遇到索引或数据类型的校验问题,可在assert_frame_equal中添加参数调整校验规则,例如:

pdt.assert_frame_equal(result_df, ex1, check_index_type=False, check_dtype=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:36:07