美文网首页
写python时,不使用print咋调试?

写python时,不使用print咋调试?

作者: iuhelper | 来源:发表于2017-12-20 16:55 被阅读0次
Winter Han
2017-12-20 at ShangHai

与C#,java等强类型语言有强大的支持断点调试IDE不同,大多数写python的场景,是写一些小工具,犯不着用pycharm这样专业的IDE。更多的时候,直接使用Notepad++,Sublime Text进行开发。

如何去“调试”代码?这个问题必须要解决!

用“print语句”,可能是大多数人的共同选择了。

像这样


image.png

怎样避免写出上面的代码呢?

先介绍一下logging

要完成记日志这个事儿呢,必须要有logger, handler这两个对象。
logger对象规定了整个的处理流程,但具体如何处理,却依赖于注入的具体的handler处理。

quickstart
import logging

# create logger
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)

# create file handler and set level to debug
handler = logging.FileHandler('log.txt', 'a')
handler.setLevel(logging.DEBUG)

# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# add formatter to handler
handler.setFormatter(formatter)

# add handler to logger
logger.addHandler(handler)

# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

用logging 替代 print 调试

print,只推荐,在命令行程序的输出中用用。但就我们团队现状来看,被滥用于各种模块中,可能是普遍现象。
在开发阶段,调试时直接print出来,非常顺爽。但系统上线后,要注销这些print也是要工作量的,往往是不会做这项工作的。这就造成了一些不可预料的问题,甚至可能导致IO报错,使整个应用崩溃。

思路:多给logger注册一个用于向console输出的handler

StreamHandler对象就是,向标准输出设备,输出信息的 handler。
比如 上例,我们除注册FileHandler对象外,可以再注册一个StreamHandler对象。
上线后,再将其注释掉,就可以了。

........
# create console handler and set level to debug
stream_hander = logging.StreamHandler()
stream_hander.setLevel(logging.DEBUG)
........
# add file_hander  and stream_hander to logger
logger.addHandler(handler)
logger.addHandler(stream_hander)
........

在Flask框架中使用logging踩过的坑

在Flask框架中使用logging的过程中,踩过一个坑。可能别的框架也会出现。

logging配置都是对的,且日志文件也生成了,就是不往里面写日志

可能是两个原因造成的。
一、使用了debug模式
二、使用了app.errorhandler装饰器

相关文章

网友评论

      本文标题:写python时,不使用print咋调试?

      本文链接:https://www.haomeiwen.com/subject/mrygwxtx.html