zoukankan      html  css  js  c++  java
  • 日志/异常处理(nnlog+traceback)

    一、nnlog日志模块,使用之前,需要先pip安装下

    import nnlog
    import traceback
    log=nnlog.Logger('python.log',level='debug',when='D',backCount=5)
    # when D是每天 M每月 S每秒
    # 日志级别
    log.debug('debug数据') #打印的调试信息,是最详细的,比较占用资源,生产环境很少用
    log.info('详细信息') #打印一些需要的提示信息
    log.warning('警告数据') #出现警告,只打印warning级别的日志
    log.error('错误信息') #出现错误
    # log.surprise() 
    traceback.format_exc() #拿到出错的信息,放在日志文件里面
    traceback.print_exc() #只在执行时pring出错误信息
    
    运行结果:
    2020-05-26 18:42:18,625 - D:/NiuTest/MLingTest/day6(数据库操作)/写日志.py[line:6] - DEBUG: debug数据
    2020-05-26 18:42:18,626 - D:/NiuTest/MLingTest/day6(数据库操作)/写日志.py[line:7] - INFO: 详细信息
    2020-05-26 18:42:18,626 - D:/NiuTest/MLingTest/day6(数据库操作)/写日志.py[line:8] - WARNING: 警告数据
    2020-05-26 18:42:18,626 - D:/NiuTest/MLingTest/day6(数据库操作)/写日志.py[line:9] - ERROR: 错误信息
    NoneType
    

      注:会在当前目录下生成一个python.log文件,记录运行的内容如下:

     二、traceback模块

    1、traceback.print_exc()
    2、traceback.format_exc()
    3、traceback.print_exception()

    1、print_exc():是对异常栈输出
    2、format_exc():是把异常栈以字符串的形式返回,print(traceback.format_exc()) 就相当于traceback.print_exc()
    3、print_exception():traceback.print_exc()实现方式就是traceback.print_exception(sys.exc_info()),可以点sys.exc_info()进去看看实现
    

      例一:

    if __name__ == '__main__':
        import sys
        import time
        import traceback
    
        try:
            function(1, 0)
        except Exception as e:
            print('***1', type(e), e, '***1')
            time.sleep(2)
    
            print("1***traceback.print_exc():*** 1")
            time.sleep(1)
            traceback.print_exc()
            time.sleep(2)
    
            print("2***traceback.format_exc():***2 ")
            time.sleep(1)
            print(traceback.format_exc())
            time.sleep(2)
    
            print("3***traceback.print_exception():***3 ")
            time.sleep(1)
            traceback.print_exception(*sys.exc_info())
    
    运行结果:
    ***1 <class 'NameError'> name 'function' is not defined ***1
    1***traceback.print_exc():*** 1
    Traceback (most recent call last):
      File "D:/NiuTest/NiuTest/day6/day6/写日志.py", line 18, in <module>
        function(1, 0)
    NameError: name 'function' is not defined
    2***traceback.format_exc():***2 
    Traceback (most recent call last):
      File "D:/NiuTest/NiuTest/day6/day6/写日志.py", line 18, in <module>
        function(1, 0)
    NameError: name 'function' is not defined
    
    3***traceback.print_exception():***3 
    Traceback (most recent call last):
      File "D:/NiuTest/NiuTest/day6/day6/写日志.py", line 18, in <module>
        function(1, 0)
    NameError: name 'function' is not defined
    
    Process finished with exit code 0
    

      注:可以看出,三种方式打印结果是一样的。在开发时,做调试是很方便的。也可以把这种异常栈写入日志

    例二:

    import pymysql
    import nnlog
    import traceback
    log = nnlog.Logger('python.log',level='debug',backCount=5,when='D')
    mysql_info = {
        'host':'****',
        'port':3306,
        'db':'jxz',
        'password':'123456',
        'charset':'utf8',
        'autocommit':True,
        'user':'jxz'
    }
    name='xiaohei'
    sql=sql = 'select * from product where4 name="%s";' % name
    def op_db(sql,one_tag=True):
        try:
            log.debug("开始连接数据库,数据库连接信息是%s"%mysql_info)
            connect = pymysql.connect(**mysql_info)
        except Exception as e:
            log.debug("连接数据失败")
            log.error("连接数据失败,请检查")
    
            log.error(traceback.format_exc())
            # traceback.format_exc()拿到出错的那一大坨字符串
            #traceback.print_exc()#只print错误信息
            return "001"
        else:
            log.info("开始建立游标")
            cur = connect.cursor(pymysql.cursors.DictCursor)
            try:
    
                log.error("开始执行sql")
    
                log.info("sql语句是%s"%sql)
                cur.execute(sql)
            except Exception as e:
                print(e)
                log.warning(traceback.format_exc())
                log.warning("sql错误!")
                return "002"
            else:
                if one_tag:
                    result = cur.fetchone()#{}
                else:
                    result = cur.fetchall()#[]
            finally:
                cur.close()
                connect.close()
        return result
    
    op_db(sql)
    运行结果:
    会生成一个python.log文件,记录日志信息
    

      log内容如下:

     三、异常处理

    使用格式如下:

    try:
    <语句>        #运行别的代码
    except <名字>:
    <语句>        #如果在try部份引发了'name'异常
    except <名字>,<数据>:
    <语句>        #如果引发了'name'异常,获得附加的数据
    else:
    <语句>        #如果没有异常发生
    finally:
    <语句>    #退出try时总会执行
    例一:
    d = {}
    try:
        print(d['name'])
    except Exception as e:
        print("出异常了",e)
    else:
        print("不出异常的时候走到这里")
    finally:
        print("不管什么时候都会走这里呢")
    运行结果:
    出异常了 'name'
    不管什么时候都会走这里呢
    

      例二:

    d = {'name':'MLing'}
    try:
        print(d['name'])
    except Exception as e:
        print("出异常了",e)
    else:
        print("不出异常的时候走到这里")
    finally:
        print("不管什么时候都会走这里呢")
    
    运行结果:
    MLing
    不出异常的时候走到这里
    不管什么时候都会走这里呢
    

      

     
  • 相关阅读:
    阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:8. 委托事件
    阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:7. 服务调用
    Git
    Git
    Git
    Git
    Git
    Git
    Git
    Delphi
  • 原文地址:https://www.cnblogs.com/MLing/p/12967815.html
Copyright © 2011-2022 走看看