Python批量获取IPv4地址校验重输时无限循环问题求解
批量IPv4采集代码无限循环问题修复
需求背景
实现批量采集10个IPv4地址的逻辑,调用validator函数逐一校验地址合法性:
- 单个地址无效时,仅提示用户重新输入当前无效项即可
- 校验通过的地址直接传入
converter函数执行转换
异常复现
按需求编写的代码运行时出现无限循环,无法走完完整流程,原代码如下:
while True: ipv4 = input("Enter 10 IPv4 Address: ").split(" ") for i in range(10): if validator(ipv4[i]): converter(ipv4[i]) else: print("Invalid IPv4 Address") while True: ip = input("Enter the Valid IPv4 Address:") if validator(ip): converter(ip) break break
根因分析
- 未判断初始输入分割后的列表长度:如果用户输入的地址数量不足10个,遍历到超出列表长度的索引时会直接抛出索引越界错误,外层无捕获的
while True会导致程序反复重启整个输入流程 - 内层重输逻辑未和外层遍历计数对齐:修正后的有效地址没有同步回原遍历列表,遇到多个无效地址、输入缺项的场景时,循环计数和实际已处理的有效地址数不匹配,无法触发最终退出循环的
break - 错误提示未明确是哪一个位置的地址无效,用户重输时也无法对应到错误项,容易反复输入错误内容
修复方案
直接移除外层无意义的死循环,按索引逐个校验地址,缺项、无效项单独触发重输,凑够10个有效地址即结束流程:
valid_ips = [] raw_ips = input("请输入10个空格分隔的IPv4地址:").split() for pos in range(10): # 优先取初始输入对应位置的地址校验 if pos < len(raw_ips) and validator(raw_ips[pos]): current_ip = raw_ips[pos] converter(current_ip) valid_ips.append(current_ip) else: # 当前位置地址无效/缺失,单独循环要求重输 while True: current_ip = input(f"第{pos+1}个地址不合法,请重新输入:") if validator(current_ip): converter(current_ip) valid_ips.append(current_ip) break print("全部地址处理完成,共采集有效IPv4地址10个:", valid_ips)
内容的提问来源于stack exchange,提问作者Sri Ram M S
相关产品推荐
相关产品推荐

