循环生成用户数据列表遇UnboundLocalError,如何确保迭代完成后调用函数?
问题原因
你遇到的UnboundLocalError是因为每次调用get_info时,函数内部只会给当前userid对应的变量赋值,其他三个变量根本没被定义就传入了use_info。而且get_info里的变量都是局部变量,每次函数调用都会重置,之前的赋值也会丢失,完全没法攒齐四个用户的数据。
解决方案
核心思路是先收集完所有用户的数据,再统一调用use_info,不要在单次请求后就立刻调用目标函数。
修改后的代码示例
import requests userid_list = [1, 2, 3, 4] user_data = {} # 用字典存储每个用户的数据,避免单独定义四个变量 def get_info(userid): response = requests.get(f"https://www.example.com/api/{userid}") # 补全HTTP协议头 return list(response.json()['a']['b']) # 第一步:遍历所有用户,收集数据 for userid in userid_list: user_data[userid] = get_info(userid) # 第二步:所有数据收集完成后,调用use_info use_info(user_data[1], user_data[2], user_data[3], user_data[4])
关键改进点
- 让
get_info直接返回用户数据,而非在内部做变量赋值,逻辑更清晰。 - 用字典
user_data统一存储所有用户的数据,避免维护多个独立变量,后续新增用户ID时扩展性更好。 - 将
use_info的调用放在遍历完成后,确保四个用户的数据都已准备完毕。
额外优化建议
如果use_info支持接收列表类参数,可以进一步简化调用逻辑:
# 按userid_list的顺序传递所有数据 use_info(*[user_data[uid] for uid in userid_list])
这样就算后续userid_list的长度变化,也不用修改use_info的调用参数。
内容的提问来源于stack exchange,提问作者Jared Robertson
相关产品推荐
相关产品推荐

