运行字符串转浮点数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
相关产品推荐
相关产品推荐

