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)
关键修正说明
- 使用局部字典
current_supervisor,每个监督者对应独立的字典实例,避免引用冲突。 - 先通过列表收集所有教室,再统一转为空格分隔的字符串(也可根据需求直接保留列表格式)。
- 用
strip()处理输入行,确保空行判断准确(if not class_line直接检测空字符串)。 - 调用处理函数,确保逻辑正常执行。
- 增加非
supervisor职位的判断,避免无效输入引发错误。
内容的提问来源于stack exchange,提问作者letsgamble
相关产品推荐
相关产品推荐

