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

如何阻止NumPy浮点数在doctest中显示为np.float64?

解决Doctest中Numpy类型显示不匹配的问题

方法1:自定义Doctest输出转换函数

不用逐个修改测试用例,直接给doctest加个输出转换器,自动把numpy类型的字符串替换成原生Python类型格式:

在你的测试入口文件(比如run_doctests.py)里加这段代码:

import doctest
import numpy as np

def normalize_numpy_output(got_output):
    # 替换np.float64(xx)为xx
    got_output = got_output.replace('np.float64(', '').replace(')', '')
    # 如需处理其他numpy类型,比如np.int64,继续加替换规则
    got_output = got_output.replace('np.int64(', '').replace(')', '')
    return got_output

# 自定义输出检查器
class NumpyFriendlyChecker(doctest.OutputChecker):
    def check_output(self, want, got, optionflags):
        # 先统一处理实际输出的格式
        normalized_got = normalize_numpy_output(got)
        return super().check_output(want, normalized_got, optionflags)

# 替换默认的检查器
doctest.OutputChecker = NumpyFriendlyChecker

之后用这个文件启动doctest,所有numpy类型的输出都会被自动适配成测试用例里的预期格式。

方法2:修改Numpy打印配置

从根源上让numpy输出原生类型的字符串,在测试启动时添加配置:

import numpy as np
# 让numpy浮点数打印时直接输出为普通浮点数格式
np.set_printoptions(formatter={'all': lambda x: str(float(x)) if isinstance(x, np.floating) else str(x)})

这个配置会覆盖numpy默认的类型打印规则,让输出和本地环境一致。

方法3:锁定CI环境的依赖版本

本地和CI的numpy版本差异可能是问题根源,直接在CI的依赖配置(比如requirements.txt或者GitHub Actions的安装步骤)里锁定numpy版本,和本地一致:

numpy==1.24.3

消除版本差异后,输出格式自然会对齐。


内容的提问来源于stack exchange,提问作者Erel Segal-Halevi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:22:07