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

检查真实IP地址时触发ValueError:无效十进制字面量'192.168.0.105'

解决IP地址验证的ValueError问题

嘿,我一眼就看出问题所在啦!你遇到的ValueError: invalid literal for int() with base 10: '192.168.0.105',是因为你把整个带点的IP地址字符串直接传给了int()函数——它根本没办法把像192.168.0.105这种包含小数点的字符串转换成整数呀!

要正确验证IP地址,得把它拆分成四个独立的网段,逐个检查才行。我给你两种可行的解决方案:

方案一:手动拆分验证(适合理解原理)

这种方法能让你清楚看到IP验证的每一步逻辑:

def is_valid_ip(ip_address):
    # 按小数点拆分IP地址
    ip_segments = ip_address.split('.')
    
    # 首先检查是不是正好4个网段
    if len(ip_segments) != 4:
        return False
    
    for segment in ip_segments:
        # 检查网段是不是纯数字(避免字母或特殊字符)
        if not segment.isdigit():
            return False
        
        # 把网段转成整数
        segment_num = int(segment)
        
        # 验证网段数值在0-255之间
        if segment_num < 0 or segment_num > 255:
            return False
        
        # 避免前导零的情况(比如"019"这种无效,除非是单个"0")
        if len(segment) > 1 and segment.startswith('0'):
            return False
    
    # 所有检查都通过,返回有效
    return True

# 测试几个例子
print(is_valid_ip('192.168.0.105'))  # 输出 True
print(is_valid_ip('256.0.0.1'))     # 输出 False(超过255)
print(is_valid_ip('192.168.0.010')) # 输出 False(前导零)
print(is_valid_ip('192.168.0'))     # 输出 False(只有3个网段)

方案二:用Python内置模块(简洁高效)

如果你用的是Python 3.9及以上版本,直接用标准库的ipaddress模块更省心,它会帮你处理所有细节:

import ipaddress

def is_valid_ip(ip_address):
    try:
        # 尝试解析IP地址,成功则有效
        ipaddress.ip_address(ip_address)
        return True
    except ValueError:
        # 解析失败则返回无效
        return False

把原来的代码换成上面的任意一种,应该就能顺利验证IP地址啦!

内容的提问来源于stack exchange,提问作者JackC2291

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:15:17