Python-TypeError:无序类型:NoneType()<;非类型()

Python-TypeError:无序类型:NoneType()<;非类型(),python,ip,tuples,Python,Ip,Tuples,使用python包,我试图查看ip地址是否在特定范围内。这是我的密码: for line in g: org= line.split("|")[0] ranges = ast.literal_eval(line.split('|')[1]) for range in ranges: start,end = range range_s = IpRange(start,end) if '198.0.184.126' in ran

使用python包,我试图查看ip地址是否在特定范围内。这是我的密码:

for line in g:
    org= line.split("|")[0]
    ranges = ast.literal_eval(line.split('|')[1])
    for range in ranges:
        start,end = range
        range_s = IpRange(start,end)
        if '198.0.184.126' in range_s is True:
        print (range_s)
下面是我的文件的外观:

FOP Michail Mandryk |[('91.195.172.0', '91.195.173.255'), ('195.95.222.0', '195.95.223.255')]
Circle 3 Inc.|[('66.64.129.28', '66.64.129.31'), ('216.23.64.120', '216.23.64.120'), ('216.215.250.46', '216.215.250.47')]
a1web.com.br|[('50.116.92.89', '50.116.92.89')]
Shandong Dezhou decheng district government|[('61.133.124.64', '61.133.124.79')]
Global ICT Solutions (ShangHai) CO.,LTD|[('43.247.100.0', '43.247.103.255')]
VendorCert|[('173.1.96.112', '173.1.96.127')]
Lowell City Library|[('198.0.184.112', '198.0.184.127')]
abc|[('123.0.0.0/8' , '12.12.3.0/8')]
我得到了这个错误,我找不到原因。有人能帮忙吗

TypeError                                 Traceback (most recent call last)
<ipython-input-59-420def563a4e> in <module>()
     19 
     20 #         print (start,end)
---> 21         range_s = IpRange(start,end)
     22 #         if '198.0.184.126' in range_s is True:
     23         print (range_s)

/opt/miniconda3/lib/python3.4/site-packages/iptools/__init__.py in __init__(self, start, end)
    158         start = _address2long(start)
    159         end = _address2long(end)
--> 160         self.startIp = min(start, end)
    161         self.endIp = max(start, end)
    162         self._len = self.endIp - self.startIp + 1

TypeError: unorderable types: NoneType() < NoneType()
TypeError回溯(最近一次调用)
在()
19
20#打印(开始、结束)
--->21范围=IpRange(开始、结束)
22#如果u s范围内的'198.0.184.126'为真:
23打印(范围)
/opt/miniconda3/lib/python3.4/site packages/iptools/\uuuuuu init\uuuuuuu.py in\uuuuuuuu init\uuuuuuu(self、start、end)
158开始=_地址2长(开始)
159结束=_地址2长(结束)
-->160 self.startIp=min(开始、结束)
161 self.endIp=max(开始、结束)
162 self.\u len=self.endIp-self.startIp+1
TypeError:无序类型:NoneType()
如果无法解析有效的IPv4或IPv6地址,则返回
None

您的
开始
结束
地址都未能进行这样的解析,两个
值上的
min()
函数随后失败,出现以下异常:

>>> min(None, None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: NoneType() < NoneType()
另一方面,您不需要在
if
语句中测试
是否为True
。这就是
的作用。在任何情况下,通过比较链接语句的含义都与您认为的含义不同。严格使用:

if '198.0.184.126' in range_s:
    print (range_s)

当使用
为真时
实际上是在测试
('198.0.184.126'范围内)和(范围为真)
,这永远不会是真的。

当Python 3.4包含一个插件时,为什么要使用
iptools
?@Martijn Pieters是的,但ipaddress库不提供此功能,我想我无法用给出的示例重现您的问题。但是,为什么?无法重现问题,或者为什么我询问使用
iptools
库?我认为地址是有效的,但范围可能不等于标准ip前缀范围。可能吗?因为使用Python3中的ipaddress包,对于某些范围,我提取了不止一个prefix@Mee:关于
iptools.ipv4.ip2long
的文档表明,对于超出有效范围的地址,它将返回
None
<例如,代码>127.0.0.256将无效。您可以直接使用该函数来测试
start
end
值。谢谢。事实上,在我的文件中间有一个奇怪的角色。
if '198.0.184.126' in range_s:
    print (range_s)