Python-在第一个IF条件下停止



我很难理解为什么我的脚本只匹配字典中的第一个键,而不处理其他键。

如果只存在tcp端口,我的脚本会生成我需要的命令,但如果我尝试将其混合并具有其他端口(密钥(,它将不会处理其他elif。无论我是否将其放入for循环中,我似乎都得到了相同的结果。我是新手,所以我可能错过了一些基本的东西。

ports = {'tcp': [['10', '20']], 'rant': [['100', '200']], 'cm': ['https']}
if __name__ == "__main__":
obj = []
tcpport = []
udpport = []
mxport = []
if ports.get("tcp"):
tcp2 = ports.get("tcp")
tcpport = True
for t in compile_port2(tcp2):
obj.append(t)
print("compiled tcp only objects")
elif ports.get("udp"): 
udpport = True
udp2 = ports.get("udp")
for u in compile_port2(udp2):
obj.append(u)
print("compiled udp only objects")
elif ports.get("rant"):
rant2 = ports.get("rant")
tcpport = True
ran_tcp2 = (list(it.zip_longest(*[iter(rant2[0])] * 2)))
for rt in compile_rant_port2(ran_tcp2):
obj.append(rt)
print("compiled tcp only range objects")
elif ports.get("ranu"):
ranu2 = ports.get("ranu")
udpport = True
ran_udp2 = (list(it.zip_longest(*[iter(ranu2[0])] * 2))) # split strings by groups of 2 for port ranges  
for ru in compile_rant_port2(ran_udp2):
obj.append(ru)
print("compiled udp only range objects")
elif ports.get("cm"):
tcpport = True
cm2 = ports.get("cm")
for c in compile_port2(cm2):
obj.append(c)
print("compiled worded objectsnn")
else:
print("no items found")

使用elif是为了评估else-if条件。因此,如果if条件匹配,它将不会与任何其他elif条件匹配。

如果要处理所有密钥,则应该有多个if条件,而不是elif条件。

见下文,修改版

ports = {'tcp': [['10', '20']], 'rant': [['100', '200']], 'cm': ['https']}
if __name__ == "__main__":
obj = []
tcpport = []
udpport = []
mxport = []
items_found = False
if "tcp" in ports:
items_found=True
tcp2 = ports.get("tcp")
tcpport = True
for t in compile_port2(tcp2):
obj.append(t)
print("compiled tcp only objects")
if "udp" in ports:
items_found = True
udpport = True
udp2 = ports.get("udp")
for u in compile_port2(udp2):
obj.append(u)
print("compiled udp only objects")
if "rant" in ports:
items_found = True
rant2 = ports.get("rant")
tcpport = True
ran_tcp2 = (list(it.zip_longest(*[iter(rant2[0])] * 2)))
for rt in compile_rant_port2(ran_tcp2):
obj.append(rt)
print("compiled tcp only range objects")
if "ranu" in ports:
items_found = True
ranu2 = ports.get("ranu")
udpport = True
ran_udp2 = (list(it.zip_longest(*[iter(ranu2[0])] * 2)))  # split strings by groups of 2 for port ranges  
for ru in compile_rant_port2(ran_udp2):
obj.append(ru)
print("compiled udp only range objects")
if "cm" in ports:
items_found = True
tcpport = True
cm2 = ports.get("cm")
for c in compile_port2(cm2):
obj.append(c)
print("compiled worded objectsnn")

if not items_found:
print("no items found")

我理解得对吗?你问为什么第一个子句

if ports.get("tcp"):
tcp2 = ports.get("tcp")
tcpport = True
for t in compile_port2(tcp2):
obj.append(t)
print("compiled tcp only objects")

是唯一一个在";tcp";是否存在于端口中?如果elif-else块应该是这样工作的。Elif代表else if;如果在我们之前发生的事情是真的,那么尝试下一个";

如果你想要多个东西,那么使用多个If块而不是elif。

最新更新