You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类中while循环遍历IP连MySQL未正常执行问题排查

代码错误说明

你写的重试循环未按预期运行,共有3处明确问题:

  • 核心逻辑错误:IterativeOrNotRun的while循环体内直接写了return(self.SqlConnector())。return语句执行时会立刻终止整个方法、将结果返回给上层调用方,while循环完全没有第二次执行的机会。第一次跑完SqlConnector后,哪怕self.IPLists里还剩连接失败的IP,函数已经直接退出,持续重试的逻辑根本不会触发。
  • 遍历逻辑隐患:SqlConnector方法中,你在for ip in reversed(self.IPLists)遍历列表的循环里,直接执行self.IPLists.remove(ip)修改正在遍历的原列表,这种写法很容易出现索引错位、元素漏遍历的问题,哪怕外层重试循环正常,也会出现部分IP没被检测到的情况。
  • 运行时bug:SqlConnector末尾return的列表中引用了self.c1/self.c2/self.c3三个属性,但你在__init__方法里定义的对应属性是self.c1_List/self.c2_List/self.c3_List,代码执行到return语句时会直接抛出属性不存在的错误。
修正方法

1. 修复循环提前退出问题

调整IterativeOrNotRun逻辑,循环内只执行重试逻辑,等IP列表清空后再统一返回结果,不要在循环体内写return:

def IterativeOrNotRun(self):
    if self.IterativeOrNot:
        while len(self.IPLists) != 0:
            self.SqlConnector()
        # 所有IP连接完成后再返回
        return [self.DataFramesStack, [self.c1_List, self.c2_List, self.c3_List], self.FailedLocationList]
    else:
        self.SqlConnector()
        return [self.DataFramesStack, [self.c1_List, self.c2_List, self.c3_List], self.FailedLocationList]

2. 修复遍历列表的隐患

每次执行SqlConnector时,不要直接遍历原IP列表,先创建列表副本做遍历,连接成功的IP再从原列表移除,避免遍历过程中索引错位。

3. 修复属性名错误

把所有引用不存在属性的位置替换成你实际定义的c1_List/c2_List/c3_List,消除运行时报错。

优化建议:重试逻辑可以增加1-3秒的间隔等待,避免短时间内频繁发起连接被MySQL服务端拦截。

内容的提问来源于stack exchange,提问作者devMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:33:18