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

如何从WebElement列表计算价格平均值?解决sum()调用报错问题

问题解决:Decimal对象不可迭代导致的sum()报错

你的错误根源是:循环过程中,你每次将单个价格转换后的Decimal值赋值给value变量,循环结束后value只是最后一个价格的数值,并非存储所有价格的可迭代列表。而sum()函数要求传入可迭代对象(如列表、元组),直接传入单个Decimal自然会触发TypeError。

修改后的代码

from decimal import Decimal
from re import sub
from selenium.webdriver.common.by import By

# 获取价格元素列表
price_elements = browser.find_elements(by=By.CSS_SELECTOR, value="p.sc-gKPRtg.sc-cTVMo.gFSBHP.dJSocd")
# 创建空列表存储所有处理后的价格数值
price_values = []

for elem in price_elements:
    value_text = elem.text
    # 清理非数字和小数点的字符,转换为Decimal
    cleaned_value = Decimal(sub(r'[^\d.]', '', value_text))
    price_values.append(cleaned_value)
    print(cleaned_value)

# 先判断列表非空,避免除以0的错误
if price_values:
    avg = sum(price_values) / len(price_values)
    print(avg)
else:
    print("未找到任何价格元素")

关键修改说明

  • 新增price_values空列表,专门存储所有处理后的价格数值,而非用单个变量覆盖
  • 循环中使用append()将每个Decimal值添加到列表,保留所有价格数据
  • 添加空列表判断,防止未找到价格元素时触发除以0的错误
  • 优化变量命名,比如将price改为price_elements,明确其是WebElement列表,提升代码可读性

内容的提问来源于stack exchange,提问作者Damian Sokalski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:31:49