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

eval执行含超大整数的长表达式时遇long_scalars溢出,求解决方法

解决eval执行超大数字表达式时的溢出警告问题

问题原因

这个RuntimeWarning: overflow encountered in long_scalars警告,本质是表达式运算中使用了固定精度整数类型(比如numpy.int32),而运算结果超出了该类型的数值范围。Python原生int是任意精度的,不会出现溢出,所以问题大概率出在你的变量x1、x2...是低精度整数类型,或者表达式里硬编码了低精度整数转换。

解决方法

  • 提前转换变量类型
    如果x1、x2...是numpy数组,先把它们转成int64类型:

    import numpy as np
    x1 = x1.astype(np.int64)
    x2 = x2.astype(np.int64)
    # 其他变量同理
    

    若是单个变量,直接用Python原生int即可(无需手动转换,Python会自动处理超大整数)。

  • 修改表达式中的数字定义
    如果表达式里有硬编码的超大数字且指定了低精度类型(比如np.int32(12345678901234)),把这类代码改成np.int64(12345678901234),或者直接写数字字面量(Python会自动用原生任意精度int)。

  • 自定义eval的命名空间强制指定类型
    给eval传入自定义的全局命名空间,把int映射为np.int64,让表达式里的整数转换都用int64:

    import numpy as np
    custom_globals = {
        '__builtins__': __builtins__,
        'int': np.int64
    }
    I = eval(string, custom_globals)
    

    这样表达式中所有int()调用都会用int64执行,原生数字字面量也会和int64自动兼容运算,避免溢出。

  • 临时禁用警告(不推荐)
    若你确认运算结果正确只是不想看到警告,可以临时屏蔽:

    import warnings
    warnings.filterwarnings('ignore', category=RuntimeWarning)
    I = eval(string)
    

    注意:这只是隐藏警告,没有解决溢出问题,可能导致结果失真,仅作临时应急用。

关于指定数据类型的问题

完全可以通过上述方法指定eval计算时的整数类型:要么提前把变量转成int64,要么通过自定义命名空间让表达式内的整数操作默认用int64,两种方式都能解决超大数字的溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:10:39