一次BUG排查过程: Python导入的模块运行过程中变成了None

在Python 2.7中,一个模块在运行过程中变为None,原因是垃圾回收器回收了模块。博客作者通过排查,发现问题是由于模块加载机制导致的不一致。解决方案是采用延迟加载,确保模块只被加载一次。Python 2.7和3.x在模块删除后的处理方式不同,2.7会将全局变量置为None,而3.x不会。
摘要由CSDN通过智能技术生成

问题

今天测试 xnote 在Python 2.7兼容性的时候,发现一个功能不能使用了,但是Python3下面却运行很好。

具体表现是这样,我有一个search模块,它会去加载search目录下的子模块并且把它们注册到一个映射表中,用户输入查询条件之后会通过映射表的pattern匹配,匹配上了就执行相应的方法执行搜索动作。写成伪代码如下

mappings = []
reg_infos = [
    (r"([a-zA-Z]+)",  "translate.search"),
    (r"(.*[0-9]+.*)", "calculator.search")
]
def init():
    for pattern, modname in reg_infos:
        mod = import_mod(modname)
        mappings.append((pattern, mod.search))

def search(key):
    result = []
    for pattern, func in mappings:
        if re.match(pattern, key):
            result += func(key)
    return result

有一个很奇怪的现象是 Python2.7 下面calculator执行很正常&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值