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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:15:01