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

Python读取管道输入至空行并写入字典的代码问题排查求助

代码问题排查与修正

原代码存在的核心问题

  • 全局字典重复引用:supervisor_dict是全局变量,每次添加到supervisor_list的都是同一个字典的引用,后续修改字典会导致列表中所有元素同步变化,最终列表内容全为最后一次修改的结果。
  • 循环添加逻辑错误:每次读取教室后就将字典加入列表,会导致列表中多次重复添加同一个(正在修改的)字典,而非收集完所有教室后仅添加一次。
  • 空行判断失效:isspace()无法识别空字符串(空行通过input()读取后是""),""调用isspace()返回False,导致循环错误继续执行,甚至将空字符串拼接到教室字段中。
  • 函数未执行:定义了user_type()但未调用,脚本运行后不会处理任何输入。

修正后的代码

supervisor_list = []

def process_supervisor():
    # 读取职位,去除首尾空白字符(含换行)
    check_who = input().strip()
    if check_who != "supervisor":
        return
    
    # 读取姓名
    name = input().strip()
    # 为当前监督者创建独立字典,避免全局引用问题
    current_supervisor = {
        "User": check_who,
        "Name": name,
        "School_class": []
    }
    
    # 循环读取教室,直到遇到空行
    while True:
        class_line = input().strip()
        if not class_line:  # 空行则终止循环
            break
        current_supervisor["School_class"].append(class_line)
    
    # 将教室列表转为空格分隔的字符串(如需保留列表格式可删除此行)
    current_supervisor["School_class"] = " ".join(current_supervisor["School_class"])
    supervisor_list.append(current_supervisor)

# 执行处理逻辑
process_supervisor()

# 验证输出(可根据需求删除)
print(supervisor_list)

关键修正说明

  1. 使用局部字典current_supervisor,每个监督者对应独立的字典实例,避免引用冲突。
  2. 先通过列表收集所有教室,再统一转为空格分隔的字符串(也可根据需求直接保留列表格式)。
  3. 用strip()处理输入行,确保空行判断准确(if not class_line直接检测空字符串)。
  4. 调用处理函数,确保逻辑正常执行。
  5. 增加非supervisor职位的判断,避免无效输入引发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:06:34