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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 11:53:09