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

运行字符串转浮点数Python代码时出现KeyError: '.'错误求助

解决str2float函数中的KeyError: '.'问题

嘿,我一眼就看到问题出在哪了——你遇到的KeyError: '.'是因为处理后的字符串里还留着小数点,但你的DIGITS字典里根本没有这个键!当map函数尝试用DIGITS[x]去转换小数点时,自然找不到对应的键,直接报错了。

咱们来拆解原代码的问题:
你写的new_str = s[:dot_index]+s[dot_index:]其实只是把原字符串完完整整又拼了一遍,比如输入'123.456'的话,new_str还是'123.456',小数点完全没去掉,这就导致后面的map操作碰到.时直接触发KeyError。

修复后的代码如下:

from functools import reduce
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def str2float(s):
    dot_index = s.index('.')
    # 跳过小数点,把整数部分和小数部分拼接成纯数字字符串
    new_str = s[:dot_index] + s[dot_index+1:]
    # 计算小数点后的位数:总长度减去小数点索引再减1(索引从0开始)
    decimal_places = len(s) - dot_index - 1
    # 先把纯数字字符串转成整数,再除以10的小数位数次方得到浮点数
    return reduce(lambda x, y: x*10 + y, map(lambda x: DIGITS[x], new_str)) / (10 ** decimal_places)

num = str2float('123.456')
print(num)  # 输出:123.456

关键改动说明:

  • s[dot_index+1:]:跳过了小数点,这样new_str里就只有0-9的数字字符,map操作时再也不会碰到.,彻底解决KeyError
  • 明确计算decimal_places:直接用原字符串长度减去小数点索引再减1,逻辑更清晰,哪怕输入不同长度的字符串(比如'0.123'或'1234.5')都能正确计算小数位数

你可以试试运行修复后的代码,不管是'123.456'还是其他带小数点的数字字符串,都能正常转换成浮点数啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:47:45