Python 2.7中合法IP触发无效IF分支问题求助
回答
嘿,这个问题其实有两个关键的小错误,咱们一个个拆解:
1. 字符串与数字的错误比较
item.split('.')拆分后得到的item1是字符串类型(比如"20"),你直接拿它和数字255比较,Python里字符串和数字的对比逻辑不是数值大小判断——它会把数字转成字符串后按ASCII码逐字符对比,这完全不是你想要的数值比较逻辑,不过这还不是最致命的问题。
2. IF条件被错误包裹成列表
你在IF条件外面加了方括号[item1 > 255 and flag1==0],这就把布尔表达式变成了一个列表。在Python中,只要列表非空,就会被判定为True——哪怕列表里的布尔值是False(比如[False]在条件判断里也是True)。所以不管你的比较结果是什么,这个条件永远为真,自然每次都会进入“无效IP”分支。
修正后的代码
把这两个问题修复后,代码就能正常工作了:
ips=['20.34.178.250'] for index, item in enumerate(ips): flag1 = 0 host_bytes= item.split('.') print item, index for index1, item1 in enumerate(host_bytes): print item1 # 1. 将item1转为整数做数值比较 2. 去掉条件外的方括号 if int(item1) > 255 and flag1 == 0: print "IP Address is invalid", item1, flag1 flag1 = 1 print flag1
额外优化建议
为了避免IP段包含非数字的情况(比如20.34.abc.250),可以再加一层判断确保item1能正常转成整数,让代码更健壮:
ips=['20.34.178.250', '20.34.abc.250'] for index, item in enumerate(ips): flag1 = 0 host_bytes= item.split('.') print item, index for index1, item1 in enumerate(host_bytes): print item1 if not item1.isdigit(): print "IP Address is invalid (non-digit segment)", item1 flag1 = 1 elif int(item1) > 255 and flag1 == 0: print "IP Address is invalid (out of range)", item1, flag1 flag1 = 1 print flag1
这样就能处理更多异常场景啦~
内容的提问来源于stack exchange,提问作者Rahul Raj
相关产品推荐
相关产品推荐

