Python报ValueError: Unknown format code 'f' for object of type 'str'如何解决
错误原因
报错本质是数值格式符匹配到了字符串类型的变量,代码共有4处问题触发异常:
- 数值累加时直接使用原始字符串类型的
row元素,未转浮点型,累加后汇总变量会变成字符串,后续使用.2f格式符输出时就会触发报错 - 汇总输出行的占位符索引错误:仅给
format传入了3个汇总变量,对应索引是0、1、2,但占位符写的是{4}、{5}、{6},索引完全不匹配 - 汇总输出语句放在了
for循环内部,会导致每遍历一行数据就打印一次汇总,不符合使用逻辑 - 兼容问题:原始
row元素转浮点型时没有做异常处理,若原始数据存在非数字内容会直接崩溃
修复后完整代码
def printResults(salesassociateList): """ 展示salesassociateList中的所有7项数据 """ total_f = total_tar = total_c = 0 print("*********\n\n总营收与佣金计算结果\n\n*********") print("{0:16}{1:20}{2:20}{3:20}{4:20}{5:20}{6:20}.".format("销售助理", "业务线", "预算($)", "搭建费($)", "管理费($)", "年营收($)", "佣金($)")) for row in salesassociateList: # 统一提前转浮点型,避免重复转换 col2 = float(row[2]) col3 = float(row[3]) col4 = float(row[4]) col5 = float(row[5]) col6 = float(row[6]) print("{0:16}{1:20}{2:<20.2f}{3:<20.2f}{4:<20.2f}{5:<20.2f}{6:<20.2f}.".format(row[0], row[1], col2, col3, col4, col5, col6)) # 累加时用转换后的浮点值 total_f += col4 total_tar += col5 total_c += col6 # 汇总输出挪到循环外,占位符索引改为对应3个参数的0/1/2 print("\n月度管理费总金额为${0:.2f},所有项目年营收总金额为${1:.2f},所有销售助理总佣金为${2:.2f}。".format(total_f, total_tar, total_c))
如果原始数据中存在空值、非数字等异常内容,可以增加转换兼容函数,示例如下:
def safe_float(val): try: return float(val.strip()) except (ValueError, AttributeError): return 0.0
后续转换时把float(row[x])替换为safe_float(row[x])即可。
内容的提问来源于stack exchange,提问作者catz234
相关产品推荐
相关产品推荐

