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的非整数值,用它作为索引自然会触发错误。
具体修复步骤
- 确保
j始终保持整数类型,将偏移量的计算结果强制转换为整数,同时处理浮点数精度问题。 - 根据业务需求选择合适的取整方式(四舍五入、向下取整等),避免索引越界或逻辑偏差。
修改后的代码示例
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
相关产品推荐
相关产品推荐

