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

Python执行sum(map(float, str))时报ValueError无法转换'.'为浮点数

问题根因

你报错的核心原因是对单个价格字符串做了逐字符遍历转换:
如果eur是类似"8.10"的字符串,map(float, eur)会依次把'8'、'.'、'1'、'0'这四个单独字符转成float,碰到.的时候自然就触发无法转换的错误。
同时你当前的逻辑没有存储所有卡片的价格数值,直接在单次写文件的环节求和,也拿不到所有价格的累计值。

解决步骤

  1. 提前初始化全局的总和变量,用来累计所有卡片的欧元、美元价格
  2. 遍历每个卡片的时候,直接把价格转成数值加到总和里,不要先转成字符串再处理
  3. 所有卡片处理完成后,再把总和写入文件末尾

修正后参考代码

# 初始化总和变量,放在遍历卡片的逻辑之前
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:45:02