Python3列表循环批量删元素后商品库存查询数量不足问题排查
问题定位
你代码的核心错误有两个:
- 最主要的问题:
all_values = []写在for循环内部,每一轮循环开始都会直接清空之前存入的所有查询结果,只有当前轮次的查询数据会被保留,直接导致你最终拿到的库存记录大量缺失。 - 次要的冗余逻辑:你判断运行时间是否超过480秒的两个分支代码完全一致,这个判断没有任何实际作用,可以直接删除。
你怀疑的if len(all_sku) <=250判断和break语句本身逻辑没有问题,不会导致数据缺失,只是存在小的冗余场景:当你删除250个之后列表刚好为空时,会多执行一次无意义的空列表查询。
修正方案
建议直接把all_values的初始化移到for循环外面,同时可以把无效的时间判断删除,也可以换成更灵活的while循环避免固定次数限制,适配每日浮动的商品总量,修正后的参考代码如下:
import time start_time = time.time() all_values = [] # 移到循环外部,避免每次清空历史数据 # 用while循环不需要固定迭代次数,自动适配任意长度的sku列表 while all_sku: time.sleep(10) # 列表切片不足250时会自动返回所有剩余元素,不需要额外判断最后一批 current_batch = all_sku[:250] stock_values = xxx.get_stockforitems(current_batch, session_master) all_values.append(stock_values) print(len(all_sku), 'before deleting first 250 elements') del all_sku[:250] print(len(all_sku), 'after deleting elements')
内容的提问来源于stack exchange,提问作者kekw
相关产品推荐
相关产品推荐

