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

Python中如何过滤出含有效event_data['pick']['blurb']的事件列表

解决Python事件列表过滤时的NoneType索引错误

错误原因分析

原代码存在两个核心问题:

  • 未做空值层级校验:当event["event"]或event["event"]['pick']为None时,直接链式取['blurb']会触发TypeError——None对象不支持下标访问。
  • 过滤逻辑完全错误:event["event"]['pick']['blurb'] in events的判断毫无意义,blurb是字符串类型,events是事件对象列表,两者不可能匹配,这行代码根本起不到过滤有效数据的作用。

修正后的代码

with open(output_file, "w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerow(["Event name", "Date", "Start Time", "End Time",
                     "Artists", "Images", "Image", "Blurb", "Venue"])

    filtered = []
    for event in events:
        # 逐层校验每个层级的有效性,避免空值报错
        event_data = event.get("event")
        if event_data:
            pick_data = event_data.get("pick")
            if pick_data:
                blurb = pick_data.get("blurb")
                # 仅保留blurb非空且不为空白字符串的事件
                if blurb and blurb.strip():
                    filtered.append(event)
            
    
    for event in filtered:
        event_data = event["event"]
        writer.writerow([event_data['title'],
                         event_data['date'],
                         event_data['startTime'],
                         event_data['endTime'],
                         ', '.join([artist['name'] for artist in event_data['artists']]),
                         ', '.join([images['filename'] for images in event_data['images']]),
                         event_data['images'][0]['filename'],
                         event_data['pick']['blurb'],
                         event_data['venue']['name']])

关键修改说明

  1. 安全取值:使用dict.get()方法代替直接索引,当键不存在时返回None,避免触发下标访问错误。
  2. 层级校验:依次检查event["event"]、event["event"]["pick"]是否存在,最后校验blurb是否为非空有效字符串。
  3. 修正过滤逻辑:移除了错误的in events判断,替换为实际的字段有效性校验,确保只有包含有效blurb的事件才会被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:42:38