python3.13.0 导入 nb_log 包运行报错“AttributeError: module ‘logging‘ has no attribute ‘_acquireLock‘”,怎么办

python3.13.0 导入 nb_log 包运行报错“AttributeError: module ‘logging’ has no attribute ‘_acquireLock’”,怎么办?

注:我用到的 nb_log 为 12.9。【20241113】

解决方法:
直接修改 nb_log 的源码,将报错的文件 log_manager.py 中的代码改掉:

def revision_add_handler(self, hdlr):  # 从添加源头阻止同一个logger添加同类型的handler。
    """
    Add the specified handler to this logger.
    """
    # logging._acquireLock()  # noqa
    #
    # try:
    #     """ 官方的
    #     if not (hdlr in self.handlers):
    #         self.handlers.append(hdlr)
    #     """
    #     hdlrx_type_set = set()
    #     for hdlrx in self.handlers:
    #         hdlrx_type = _get_hanlder_type(hdlrx)
    #         # if hdlrx_type == logging.StreamHandler:  # REMIND 因为很多handler都是继承自StreamHandler,包括filehandler,直接判断会逻辑出错。
    #         #     hdlrx_type = ColorHandler
    #         hdlrx_type_set.add(hdlrx_type)
    #
    #     hdlr_type = _get_hanlder_type(hdlr)
    #     # if hdlr_type == logging.StreamHandler:
    #     #     hdlr_type = ColorHandler
    #     if hdlr_type not in hdlrx_type_set:
    #         self.handlers.append(hdlr)
    # finally:
    #     logging._releaseLock()  # noqa
    with logging._lock:  # 参考python3.13.0的logging模块中的config.py
        """ 官方的
        if not (hdlr in self.handlers):
            self.handlers.append(hdlr)
        """
        hdlrx_type_set = set()
        for hdlrx in self.handlers:
            hdlrx_type = _get_hanlder_type(hdlrx)
            # if hdlrx_type == logging.StreamHandler:  # REMIND 因为很多handler都是继承自StreamHandler,包括filehandler,直接判断会逻辑出错。
            #     hdlrx_type = ColorHandler
            hdlrx_type_set.add(hdlrx_type)

        hdlr_type = _get_hanlder_type(hdlr)
        # if hdlr_type == logging.StreamHandler:
        #     hdlr_type = ColorHandler
        if hdlr_type not in hdlrx_type_set:
            self.handlers.append(hdlr)

然后就可以了。

原因:python3.13.0 中的 logging 模块做了更改,把 logging._acquireLock()logging._releaseLock() 简写成了 with logging._lock

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值