如何从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
相关产品推荐
相关产品推荐

