AttributeError: 'module' object has no attribute 'handlers'--Python子模块导入问题

想使用python的logging模块记录日志,并使用RotatingFileHandler来处理日志以便于在日志文件超过指定的大小后会重新生成新的日志文件。

基本代码如下:
import logging

logger = logging.getLogger(‘mylogger‘)
logger.setLevel(logging.INFO)

fh=logging.handlers.RotatingFileHandler(‘/tmp/test.log‘, mode = ‘a‘, maxBytes=10240, backupCount=3, encoding=‘utf-8‘)

formatter = logging.Formatter(‘%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s - %(message)s‘)
fh.setFormatter(formatter)

logger.addHandler(fh)

logger.info(‘hello logging‘)
logger.warning(‘hello logging‘)
logger.error(‘hello logging‘)
logger.critical(‘hello logging‘)

运行时报错:
AttributeError: ‘module‘ object has no attribute ‘handlers‘

原来导入logging模块后并没有自动导入其子模块handlers
import logging
import logging.handlers
……
重新运行,程序正常输出。

Python程序中模块在被访问前必须导入,import logging仅导入了logging模块,而logging是一个拥有子模块的包,这些子模块没有被自动载入。所以在访问签需要明确的导入logging.handlers子模块。

但有时候,在导入一些包时并不需要额外的动作就能自动导入其子模块,这是因为在包的__init__.py文件中进行了这些操作。在另外一些情况下,你导入的另外一些东西也可能会导入logging.handlers模块。无论如何,只要保证访问前

对应的子模块已经导入便可。某些时候一个模块看起来是个包实际上并不是,比如os和os.path。os并非包,它只是提供了其他的模块叫path,你可以通过os.path来访问。

AttributeError: 'module' object has no attribute 'handlers'--Python子模块导入问题,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。