最开始是这样的,写了一段逻辑如下:
all_to_handle_cards = self.icafe_obj.get_all_cards_data(last_monday_before, last_sunday)
for card in all_to_handle_cards:
db_data = self.db_obj.select(card['card_id'])
if db_data is not None:
all_to_handle_cards.remove(card
print("卡片:%s 已提醒过建卡") % card['card_id']
return all_to_handle_cards
想要实现的功能就是:获取一个列表数据:all_to_handle_cards,遍历此列表,如果卡片已经在库里面有了,就把它从列表里删除。最后列表里只存储库里面没有的卡片数据
但是我发现,处理的时候,最后的数据会漏处理几条,也就是说,比如:all_to_handle_cards=[1,2,3,4],然后数据库里面有[1,2],那按照我的想法最后列表剩下的数据应该是[3,4]。实际上,处理后剩下的是[2,3,4]
然后百度了一番,找到了原因:用remove方法其实是移走了当前元素,所有后面的列表元素都会往前推进,这时候你移到下一个元素时已经跳过一个元素了
解决方法就是:新建一个列表存储想要的数据
修改之后的逻辑如下:
all_to_handle_cards = self.icafe_obj.get_all_cards_data(last_monday_before, last_sunday)
# 重新定义一个列表存储需要提醒建卡的卡片数据
need_remind_cards = []
for card in all_to_handle_cards:
db_data = self.db_obj.select(card['card_id'])
if db_data is None:
need_remind_cards.append(card)
else:
print("卡片:%s 已提醒过建卡") % card['card_id']
return need_remind_cards
网友评论