Python配置校验脚本逻辑异常:仅查首元素且分支判断错误求助
配置项校验函数的问题修复
原代码的核心逻辑错误导致了两个问题:
- 错误要求单一行内容包含所有配置项才会触发
main(),这不符合实际配置文件的格式(每个配置项单独一行),因此永远无法正确触发main() elif分支写在for line in val循环内部,会把每一行的检查结果当成整体判断,只要某一行不包含任何配置项就会执行缺失分支,完全偏离了“检查所有配置项是否存在”的需求
修正后的代码
def validator(): # 待校验的配置项列表 v = [ 'ip arp inspection', f'ip arp inspection vlan {l[2]}', 'ip dhcp snooping', f'ip dhcp snooping vlan {l[2]}', 'ip dhcp snooping information option' ] cfg_path = f'/home/tftp/cfg/{today}/all/edgecore/{l[0]}.cfg' # 读取配置文件的所有行,去除首尾空白字符(适配可能的换行/空格) with open(cfg_path, 'r') as val: cfg_lines = [line.strip() for line in val] # 收集所有缺失的配置项 missing_items = [item for item in v if item not in cfg_lines] if not missing_items: # 所有配置项都存在,执行main main() else: # 存在缺失项,写入html并调用sender with open('file_diff.html', 'w') as noname: title = f"交换机 {l[0]} 的配置不完整,缺失以下项:\n" noname.write(title + '\n'.join(missing_items)) sender()
关键修改说明
- 先读取所有行:一次性把配置文件内容加载到列表中,避免逐行循环的逻辑混乱
- 逐个检查配置项:遍历待校验列表,判断每个配置项是否存在于文件行中,精准收集缺失项
- 统一判断分支:在遍历完所有内容后,根据缺失项的有无执行对应逻辑,完全符合需求
内容的提问来源于stack exchange,提问作者user19949946
相关产品推荐
相关产品推荐

