设为首页 加入收藏

TOP

AttributeError: 'module' object has no attribute 'handlers'--Python子模块导入问题
2014-11-23 22:06:54 来源: 作者: 【 】 浏览:11
Tags:AttributeError: ' module' object has 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来访问。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C程序中唯一序列号的生成 下一篇Python学习之MySQLdb模块

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: