6个月前运行正常的Tkinter项目启动抛出scapy相关StopIteration异常求解
问题排查结论
你遇到的报错和Tkinter没有关联,不存在Tkinter重大更新导致该问题的可能性,异常触发的根源是scapy库的网卡识别逻辑。
异常原因
你抛出的StopIteration异常,是scapy调用dev_from_name方法时,传入的网卡名称在你当前设备的网卡列表中没有匹配项,遍历所有网卡迭代器后未找到目标直接抛出该异常。
之前可运行现在报错的常见诱因
- 你当前使用的设备和6个月前开发项目的设备不是同一台,或者当前设备的网卡配置发生了变更:包括重装网卡驱动、重置网络配置、新增/删除物理/虚拟网卡,都会导致原有代码中指定的网卡名现在不存在
- 你当前环境安装的scapy版本和6个月前的开发环境版本不一致,不同版本scapy在Windows平台下的网卡名称读取规则存在差异,部分旧版本支持模糊匹配、或兼容带特殊字符/中文的网卡名,新版本要求传入完整的设备GUID才能正常识别
解决步骤
- 先运行以下代码打印当前设备所有可被scapy识别的网卡标识,确认你要使用的网卡的正确名称:
from scapy.all import get_windows_if_list print([iface["name"] for iface in get_windows_if_list()])
- 找到项目中调用scapy指定网卡的代码位置,把传入的网卡名称替换成第一步打印出的对应网卡的准确值。建议不要把网卡名写死在代码里,可以改成运行时动态选择网卡、或者做成配置项,避免后续换设备或修改网络配置后再次出现该问题
- 如果确认网卡名称完全匹配还是报错,可以将scapy降级到你6个月前开发时使用的版本即可解决版本兼容问题
内容的提问来源于stack exchange,提问作者Stefan Ciurea
相关产品推荐
相关产品推荐

