Skip to main content
 首页 » 编程设计

Python: ipaddress AttributeError: 'str' 对象没有属性

2025年05月04日15落叶无声

按照给出的建议 here ,我正在使用检查 ipaddress 模块来执行类型检查:

In [25]: IPv4Address(u'100.64.1.1') in IPv4Network(u'100.64.0.0/10') 
Out[25]: True 

在 IPython 中运行良好。然而当我把它变成一个函数时:

import ipaddress 
def isPrivateIp(ip): 
    ip4addressBlocks = [u'0.0.0.0/8', u'10.0.0.0/8', u'100.64.0.0/10', u'127.0.0.0/8', u'169.254.0.0/16', u'172.16.0.0/12', u'192.0.0.0/24', u'192.0.2.0/24', u'192.88.99.0/24',  
    u'192.168.0.0/16', u'198.18.0.0/15', u'198.51.100.0/24', u'203.0.113.0/24', u'224.0.0.0/4', u'240.0.0.0/4', u'255.255.255.255/32'] 
    unicoded = unicode(ip) 
    if any(unicoded in ipaddress.IPv4Network(address) for address in ip4addressBlocks): 
        return True 
    else: 
        return False 
 
print isPrivateIp(r'169.254.255.1') 

我得到:

  File "isPrivateIP.py", line 14, in <module> 
    print isPrivateIp(r'169.254.255.1') 
  File "isPrivateIP.py", line 9, in isPrivateIp 
    if any(unicoded in ipaddress.IPv4Network(address) for address in ip4addressBlocks): 
  File "isPrivateIP.py", line 9, in <genexpr> 
    if any(unicoded in ipaddress.IPv4Network(address) for address in ip4addressBlocks): 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ipaddress.py", line 705, in __contains__ 
    if self._version != other._version: 
AttributeError: 'str' object has no attribute '_version' 

为什么会这样?

请您参考如下方法:

您检查 unicode 字符串 ip 是否在网络中,而在您使用 IPv4Address 实例之前。

你的测试必须改为

if any(IPv4Address(unicoded) in ipaddress.IPv4Network(address) for address \ 
       in ip4addressBlocks):