Python执行sum(map(float, str))时报ValueError无法转换'.'为浮点数
问题根因
你报错的核心原因是对单个价格字符串做了逐字符遍历转换:
如果eur是类似"8.10"的字符串,map(float, eur)会依次把'8'、'.'、'1'、'0'这四个单独字符转成float,碰到.的时候自然就触发无法转换的错误。
同时你当前的逻辑没有存储所有卡片的价格数值,直接在单次写文件的环节求和,也拿不到所有价格的累计值。
解决步骤
- 提前初始化全局的总和变量,用来累计所有卡片的欧元、美元价格
- 遍历每个卡片的时候,直接把价格转成数值加到总和里,不要先转成字符串再处理
- 所有卡片处理完成后,再把总和写入文件末尾
修正后参考代码
# 初始化总和变量,放在遍历卡片的逻辑之前 total_eur = 0.0 total_usd = 0.0 # 这里替换成你原来遍历所有card的循环逻辑 for card in 你的卡片列表: # 直接取数值类型的价格,不要先转字符串 eur_val = card["prices"]["eur"] usd_val = card["prices"]["usd"] # 转成字符串只用来打印和写单行记录 eur_str = str(eur_val) usd_str = str(usd_val) print(card['name'] + "|", card['set_name'] + "|" + eur_str + "€"+ "|" + usd_str + "$") text_file = open(path2+ "/"+"price.txt", "a") text_file.write(text+ "|" + eur_str + "€" +"|"+ usd_str + "$"+ "\n" +"\n") text_file.close() # 累加价格到总和 total_eur += float(eur_val) total_usd += float(usd_val) # 所有卡片处理完后,统一写入总和 text_file = open(path2+ "/"+"price.txt", "a") # 保留两位小数输出,和你预期的格式对齐 text_file.write(f"total : {total_eur:.2f}\n") text_file.close()
额外优化建议
- 可以用
with语句管理文件句柄,不用手动写close,避免异常时文件没正常关闭的问题 - 价格如果本身就是数值类型,不需要额外转float,直接累加即可
内容的提问来源于stack exchange,提问作者bibiyanki3
相关产品推荐
相关产品推荐

