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

Winter Han

2017-12-20 at ShangHai

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

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

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

像这样

c206aa827ff3

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装饰器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值