首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python :不可排序类型: NoneType() < NoneType()

Python :不可排序类型: NoneType() < NoneType()
EN

Stack Overflow用户
提问于 2015-01-18 12:12:52
回答 1查看 3.6K关注 0票数 1

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

代码语言:javascript
复制
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)

下面是我的文件的样子:

代码语言:javascript
复制
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')]

我得到了这个错误,但我找不到原因。有人能帮忙吗?

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-18 12:21:29

如果函数不能解析有效的IPv4或IPv6地址,则返回IPv6。

您的start地址和end地址都无法进行解析,而两个None值上的min()函数也会失败,但会出现异常:

代码语言:javascript
复制
>>> min(None, None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: NoneType() < NoneType()

三次检查您传入的地址,以确保它们是有效的。您可以捕获此异常以打印导致问题的值,例如:

代码语言:javascript
复制
try:
    range_s = IpRange(start,end)
except TypeError:
    print('Problematic addresses:', start, end)
    raise

另外,您不需要在is True语句中测试if。这就是if的作用所在。相比之下,链接语句并不意味着你认为它在任何情况下都意味着什么。严格使用:

代码语言:javascript
复制
if '198.0.184.126' in range_s:
    print (range_s)

当使用is True时,您实际上是在测试('198.0.184.126' in range_s) and (range_s is True),这永远不会是真的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28009518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档