You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:25:59