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

Python生成器send传入数据未存入字典,求代码调整方案

问题分析与解决

你的代码存在两个核心问题,导致send('Jane,35')传入的数据没有存入guests字典:

  1. 生成器未捕获send传入的值:原代码里的yield line_data仅负责输出数据,没有接收send方法传递的输入值,所以你传入的字符串根本没进入生成器的处理流程。
  2. yield位置逻辑错误:原代码读取文件行后立刻执行yield,后续的字典存入逻辑只处理文件读取的内容,send传入的值无法被这部分逻辑处理。

修复方案

调整生成器逻辑,让它能接收并处理send传入的数据:

guests = {}
def read_guestlist(file_name):
    text_file = open(file_name,'r')
    line_data = None
    while True:
        # 接收send传入的值,首次next()启动时返回None
        line_data = yield line_data
        # 优先处理send传入的有效数据
        if line_data and ',' in line_data:
            processed_data = line_data.strip().split(",")
        else:
            # 无传入数据时读取文件行
            processed_data = text_file.readline().strip().split(",")
        
        if len(processed_data) < 2:
            text_file.close()
            break
        name, age = processed_data[0], int(processed_data[1])
        guests[name] = age

guestlist = read_guestlist('guest_list.txt')
# 首次调用next()启动生成器,走到yield处等待输入
next(guestlist)
# 读取文件前10行
for _ in range(10):
    next(guestlist)
# 传入Jane的数据并触发处理
guestlist.send('Jane,35')

关键修改说明

  • 将yield改为line_data = yield line_data,让生成器能捕获send传入的值,作为当前循环的处理对象。
  • 增加优先级判断:如果有send传入的有效数据,优先处理该数据;否则继续读取文件行。
  • 首次启动生成器必须调用一次next(),让生成器执行到yield语句处,才能接收后续的send输入。

修改后,guests字典中会成功添加'Jane': 35的键值对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:13:33