Python userToList函数仅返回user_list未返回user_id_list故障排查
问题描述
- 需求目标:编写
userToList函数,依赖已有的usrInput、checkUname、encryption、randomID预定义函数,实现新用户注册信息入库逻辑:- 完成用户名采集、重复校验,密码采集、加密存储,以及邮箱、邮编信息采集,最终将完整用户详情存入传入的
user_list参数 - 根据用户输入的邮编长度生成对应长度的唯一用户ID,存入传入的
user_id_list参数
- 完成用户名采集、重复校验,密码采集、加密存储,以及邮箱、邮编信息采集,最终将完整用户详情存入传入的
- 异常表现:
- 函数调用结束后,仅
user_list完成了更新,user_id_list没有任何新增数据 - 后续尝试编写
testFunc用多返回值赋值的方式同时接收两个列表,依然拿不到更新后的user_id_list
- 函数调用结束后,仅
故障原因
函数内部逻辑顺序写错了:代码在执行完「将新用户详情追加到user_list」的步骤后,直接写了return user_list语句。Python中return语句执行后会立刻终止当前函数的全部后续流程,导致后面写的用户ID生成、user_id_list更新、返回user_id_list的代码块完全不会被执行。
修复方法
- 删掉中途提前返回
user_list的return语句,把返回逻辑挪到所有业务逻辑执行完成的位置 - 确保用户ID生成、
user_id_list追加操作全部执行完毕后,再统一返回两个列表,参考实现:
def userToList(user_list, user_id_list): # 采集并校验用户名 username = usrInput("请输入用户名:") checkUname(username, user_list) # 采集并加密密码 raw_pwd = usrInput("请输入密码:") encrypt_pwd = encryption(raw_pwd) # 采集邮箱、邮编 email = usrInput("请输入邮箱:") postcode = usrInput("请输入邮编:") # 用户信息存入user_list user_list.append({ "username": username, "password": encrypt_pwd, "email": email, "postcode": postcode }) # 生成对应长度用户ID,存入user_id_list new_user_id = randomID(len(postcode)) user_id_list.append(new_user_id) # 所有逻辑走完再返回 return user_list, user_id_list
- 调用时直接用两个变量接收返回值即可:
user_list, user_id_list = userToList(user_list, user_id_list)
补充说明:列表属于Python可变对象,函数内对传入列表做
append这类原地修改操作时,不需要返回也会改动原列表,但如果函数提前return,后续的修改逻辑根本不会触发,自然不会出现预期的更新效果。
内容的提问来源于stack exchange,提问作者Beidou Empress
相关产品推荐
相关产品推荐

