Python报错Logger无basicConfig属性 疑似错误信息变更字母大小写
错误原因
你最开始怀疑的“编译器自动改变量大小写”并不成立:Python抛出AttributeError时,报错信息里'XXX' object has no attribute YYY格式中的XXX,是触发错误的对象所属类的正式类名,和你给变量起的名字没有关系。你代码里的变量名确实是小写logger,只是这个变量指向的是logging模块定义的Logger类的实例,所以报错里显示大写的Logger是完全正常的输出,不存在篡改标识符的情况。
错误的核心原因是调用方法的对象搞错了:basicConfig()是logging模块提供的顶层全局配置函数,不是Logger实例的方法。你在Logger类的实例上调用一个不存在的方法,自然会触发属性不存在的报错。
这个错误的典型触发场景是:你先执行了logger = logging.getLogger(__name__)创建了日志实例,之后误把本该由logging模块直接调用的配置方法,写到了这个实例对象上。
修复方案
- 将报错行的
logger.basicConfig(...)修改为logging.basicConfig(...),且这行配置代码必须放在所有创建logger实例、打印日志的代码之前执行。 - 正确的基础使用示例:
import logging # 全局基础配置,仅需在程序入口处调用1次即可 logging.basicConfig( level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%m/%d/%Y %H:%M:%S' ) # 配置完成后再创建日志实例 logger = logging.getLogger(__name__) # 后续正常调用实例方法打日志 logger.debug("调试日志测试")
补充说明:
basicConfig属于全局一次性配置,不需要在每个使用日志的模块中重复调用,程序启动后多次调用该方法不会覆盖已有配置。
内容的提问来源于stack exchange,提问作者Bug In A Rug
相关产品推荐
相关产品推荐

