Python运行报AttributeError: 'float'对象无'type_of_payment'属性求解
AttributeError报错解决指南
直接报错原因
你调用average_list函数时传入的列表参数不符合类型约定,列表中混入了float类型的元素。当遍历到该float元素时,执行a.type_of_payment会触发属性错误,因为float类型本身没有type_of_payment属性。
你可以在遍历逻辑前增加调试代码定位异常元素来源:
for a in avg: # 新增以下代码打印元素类型和值,排查float元素 print(f"元素类型:{type(a)},元素值:{a}") if a.type_of_payment == Payment.food: # 原有逻辑
代码其他隐含bug
1. 返回值逻辑错误
Python列表的append()方法为原地修改操作,返回值为None。你当前代码写的return acc.append([...])会让函数返回None,而非你预期的平均金额列表。正确写法参考:
# 生成平均值列表 avg_result = [ average_calculation(sum_1,counter_1), average_calculation(sum_2,counter_2), average_calculation(sum_3,counter_3), average_calculation(sum_4,counter_4), average_calculation(sum_5,counter_5), average_calculation(sum_6,counter_6), average_calculation(sum_7,counter_7), average_calculation(sum_8,counter_8), average_calculation(sum_9,counter_9), average_calculation(sum_10,counter_10), average_calculation(sum_11,counter_11), average_calculation(sum_12,counter_12) ] # 直接返回结果即可,不需要额外的acc变量 return avg_result
2. 计数逻辑错误
food类型对应的计数代码写错:
if a.type_of_payment == Payment.food: sum_1 = sum_1 + a.total_amount counter_1 = counter_2 + 1 # 错误引用counter_2,应改为counter_1 + 1
3. 统计值重复问题
Payment枚举共有13个类型,你只定义了12组sum和counter变量,导致education和entertainment两个类型共用sum_7、counter_7统计,两个类型的统计结果都会失真。
内容的提问来源于stack exchange,提问作者raj man
相关产品推荐
相关产品推荐

