美文网首页
写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