对账单里金额写成 1,234.56,float(row['amount']) 抛 ValueError: could not convert string to float。整批 300 行一条都没入库,报错只指到第一行。日志里能对上时间点,这种反而好排。
float 只认纯数字和小数点,逗号属于分组符号,不在它的语法里。不同地区还可能是点做千分位 逗号做小数点,硬编码删逗号会把金额算错一千倍。这一点先确认清楚,后面就不用反复试。
python3 -c "print(float('1,234.56'.replace(',','')))"
python3 -c "import pandas as pd;print(pd.to_numeric(pd.Series(['1,234.56']).str.replace(',','')).tolist())"
「千分位解析」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。
处理上按这个顺序:先确认数据来源的地区格式 别默认逗号就是千分位;按已知格式去掉分组符 或者用 locale.atof;清洗后打印前 5 行对照原值 确认小数位没错;转换失败的行单独落盘 不要整批回滚。
结果对不对很好判断,300 行全部转换成功 合计金额和财务系统里的数差 0 元。
