pytricia==1.0.2中元素存在于迭代器但无法通过in操作符检测的异常问题求助
pytricia==1.0.2中元素存在于迭代器但无法通过in操作符检测的异常问题求助
我在使用pytricia==1.0.2处理IPv6前缀时遇到了一个奇怪的问题:当以特定顺序插入某些前缀后,部分条目明明出现在迭代器/keys列表中,却无法通过in操作符识别,甚至直接访问还会报错。
场景一:存在问题的插入顺序
# 使用pytricia==1.0.2版本 import pytricia pyt = pytricia.PyTricia() pyt['2400:0:840::/43']='l' # 异常块1 pyt['2400:0:860::/44']='k' # 异常块2 pyt['aaaa:0:860::/44']='k' # 对照块1 pyt['aaab:0:860::/43']='k' # 对照块2 # 查看所有keys pyt.keys() # Out[143]: ['2400:0:860::/44', '2400:0:840::/43', 'aaaa:0:860::/44', 'aaab:0:860::/43'] # 统计"在迭代器中但不在pyt中"的条目数量 len([x for x in pyt if x not in pyt]) # Out[144]: 2
除此之外,直接尝试访问pyt['2400:0:840::/43']或pyt['2400:0:860::/44']会返回错误。
场景二:正常工作的插入顺序
但如果我调换前两个前缀的插入顺序,所有操作就都恢复正常了:
pyt = pytricia.PyTricia() pyt['2400:0:860::/44']='k' # 异常块2 pyt['2400:0:840::/43']='l' # 异常块1 pyt['aaaa:0:860::/44']='k' # 对照块1 pyt['aaab:0:860::/43']='k' # 对照块2 # 查看所有keys pyt.keys() # Out[146]: ['2400:0:840::/43', '2400:0:860::/44', 'aaaa:0:860::/44', 'aaab:0:860::/43'] # 所有条目都能被正确识别 len([x for x in pyt if x not in pyt]) # Out[147]: 0
这种情况下,所有前缀的访问操作也不会报错。
看起来这应该是pytricia==1.0.2中和IPv6前缀插入顺序相关的Bug,有没有人遇到过类似问题,或者知道这是什么原因导致的?
备注:内容来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

