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

Python创建列表时执行计算报错的问题及解决需求

问题分析与解决方案

错误原因

你遇到的UnboundLocalError是因为在给data_keywords字典赋值前,就尝试调用它的键值计算max_clicks和weighted_clicks。更核心的问题是:这两个值是全局统计值(需要基于所有关键词数据计算),不能放在单个条目的循环里处理——你得先把所有基础数据收集完整,再统计全局值,最后给每个条目计算etv。

修正步骤

  1. 收集基础数据:先遍历API返回的所有数据,把每个关键词的基础字段(包括预计算的keywords_weighted)存入keywords列表,暂时不处理全局统计和etv。
  2. 计算全局统计值:基于已收集的keywords列表,算出所有条目的keywords_clicks最大值、keywords_weighted总和、keywords_clicks总和。
  3. 添加etv字段:遍历keywords列表,用全局统计值代入公式,给每个字典新增etv键值对。

完整修正代码

stream = whatever (whatever, whatever)
keywords = []

# 第一步:收集所有基础数据
for batch in stream:
    for row in batch.results:
        data_keywords = {}
        data_keywords["keywords_text"] = row.ad_group_criterion.keyword.text
        data_keywords["keywords_clicks"] = row.metrics.clicks  
        data_keywords["keywords_conversion_rate"] = row.metrics.conversions_from_interactions_rate
        data_keywords["keywords_weighted"] = row.metrics.clicks * row.metrics.conversions_from_interactions_rate
        keywords.append(data_keywords)

# 第二步:计算全局统计值,同时处理空数据和除零情况
if not keywords:
    print("未获取到关键词数据")
else:
    max_clicks = max(item["keywords_clicks"] for item in keywords)
    total_weighted = sum(item["keywords_weighted"] for item in keywords)
    total_clicks = sum(item["keywords_clicks"] for item in keywords)
    
    weighted_clicks = total_weighted / total_clicks if total_clicks != 0 else 0.0

    # 第三步:为每个条目计算etv
    for item in keywords:
        clicks_ratio = item["keywords_clicks"] / max_clicks
        item["etv"] = (clicks_ratio * item["keywords_conversion_rate"]) + ((1 - clicks_ratio) * weighted_clicks)

关键说明

  • 全局统计逻辑放在基础数据收集完成后,确保所有数据已加载,能正确计算max_clicks和weighted_clicks。
  • 增加了空数据和总点击量为0的判断,避免运行时抛出ValueError或ZeroDivisionError。
  • 公式已调整为符合Python语法规范,保证计算逻辑正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:18:31