IP地址子网归属判断Python代码无法输出True/False问题排查
问题:判断IP是否属于指定CIDR网段时无法输出预期结果
你的代码核心判断逻辑是正确的,但开头的sys.stdin循环提前耗尽了输入流,导致后续无法读取到需要的网段和IP地址,最终程序无法执行判断逻辑,也就不会输出True/False。
问题根源
这段代码会读取并打印所有标准输入内容:
import sys for line in sys.stdin: print(line, end="")
执行完这段代码后,标准输入流已经没有剩余内容,后面的network_block = input()和ip_address = input()会进入等待状态,等待手动输入新内容,而非读取原本的两行输入,直接导致判断逻辑无法触发。
修正后的代码
去掉多余的sys.stdin循环,保留核心判断逻辑即可:
import ipaddress # 读取输入的两行内容并去除首尾空白 network_block = input().strip() ip_address = input().strip() try: # strict=False 兼容非标准网络地址的CIDR输入(如10.0.0.1/8) subnet = ipaddress.ip_network(network_block, strict=False) ip = ipaddress.ip_address(ip_address) print("True" if ip in subnet else "False") except ValueError: # 处理非法的CIDR格式或IP地址 print("False")
如果需要适配批量输入场景,也可以直接从sys.stdin读取两行:
import sys import ipaddress # 读取输入并过滤空行 lines = [line.strip() for line in sys.stdin if line.strip()] if len(lines) >= 2: network_block = lines[0] ip_address = lines[1] try: subnet = ipaddress.ip_network(network_block, strict=False) ip = ipaddress.ip_address(ip_address) print("True" if ip in subnet else "False") except ValueError: print("False")
内容的提问来源于stack exchange,提问作者Jayy Griff
相关产品推荐
相关产品推荐

