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

Python while循环因float64迭代器触发KeyError的解决方法

问题:while循环触发KeyError: 3.0000000000000004,如何修复?

以下是编写的while循环代码:

j = 0
while j < len(THR_1):
    if THR_1[j] != 0:
        total_firing_count = total_firing_count + 1
        if THR_1[j] >= 2:
            firing_count_longer_2s = firing_count_longer_2s + 1
            firing_longer_2s.append(THR_1[j])
        j += (THR_1[j]/0.05) - 1
    j += 1

运行时出现错误:KeyError: 3.0000000000000004,其中j是float64类型的迭代变量。


修复方案

错误原因

列表(或数组)的索引必须是整数类型,但原代码中j被加上了浮点数计算结果,导致j变为float类型。再加上浮点数的精度误差(比如0.05这类小数无法在二进制浮点数中精确表示),最终j会出现类似3.0000000000000004的非整数值,用它作为索引自然会触发错误。

具体修复步骤

  1. 确保j始终保持整数类型,将偏移量的计算结果强制转换为整数,同时处理浮点数精度问题。
  2. 根据业务需求选择合适的取整方式(四舍五入、向下取整等),避免索引越界或逻辑偏差。

修改后的代码示例

j = 0
while j < len(THR_1):
    if THR_1[j] != 0:
        total_firing_count += 1
        if THR_1[j] >= 2:
            firing_count_longer_2s += 1
            firing_longer_2s.append(THR_1[j])
        # 处理浮点数精度并转换为整数,用round修正精度误差后转int
        offset = (THR_1[j] / 0.05) - 1
        j += int(round(offset))
    j += 1

补充说明

  • 如果THR_1[j]是0.05的精确倍数,直接用int()转换即可;如果存在精度偏差,round()可以修正类似3.9999999999999996这类接近整数的浮点数。
  • 若业务逻辑需要向下取整(忽略小数部分),可以用math.floor(),但需要先导入math模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:05:12