zoukankan      html  css  js  c++  java
  • Python学习笔记(23)异常处理机制与日志模块

    一、出现异常

      比如在list和字典中,出现索引值超出list范围,或者字典的key不存在时,代码就会卡住不会继续往下面走 ,这时候需要对出现异常进行处理

      如图所示为异常:

      

           

    二、处理异常

    l = [ 1,2,3]
    d = {}
    try:
        print(l[4])
        # print(d['name'])
    except IndexError as e:#当捕捉到哪种异常,就走回哪种异常处理
        print("下标不存在")
        print(e)
    except KeyError as e:
        print("key不存在")
        print(e)
    
    
    #实际情况下,会预知到会出现异常,但无法确定哪种异常,可使用Exception捕捉
    try:
        print(l[4])
        # print(d['name'])
    except Exception as e:#当捕捉到哪种异常,就走回哪种异常处理
        print("出现异常")
    
    #异常的其他语句
    l = [ 1,2,3]
    d = {}
    
    try:
        print(l[4])
        # print(d['name'])
    except Exception as e:
        print("出异常了",e)
    else:#不出现异常时走else语句
        print("不出异常的时候走到这里")
    finally:#无论是否出现异常,都会走一次finally代码
        print("什么时候走这里呢")
    

      

      如上图所示,出现了两种异常,可使用try....except   xxxx  as e 来处理

      

    二、使用异常的实例

      由于函数的入参存在传入入参不规范的情况,代码需要对可能出现的异常场景进行处理,防止因为外部因素问题,导致函数内部代码出错,导致被调用的函数无法继续执行

      关于一个连接数据库的异常处理:

      

    # import pymysql
    # mysql_info = {
    #     'host':'***.**.**.**',
    #     'port':3306,
    #     'db':'**',
    #     'password':'******',
    #     'charset':'utf8',
    #     'autocommit':True,
    #     'user':'***'
    # }
    # def op_db(sql,one_tag=True):
    #     try:
    #         connect = pymysql.connect(**mysql_info)#**后加字典,表示key=value格式
    #     except Exception as e:
    #         return "001"
    #     else:
    #         cur = connect.cursor(pymysql.cursors.DictCursor)
    #         try:
    #             cur.execute(sql)
    #         except Exception as e:
    #             return "002"
    #         else:
    #             if one_tag:
    #                 result = cur.fetchone()#{}
    #             else:
    #                 result = cur.fetchall()#[]
    #         finally:#在连接数据后无论是否出现异常均需要关闭游标和连接
    #             cur.close()
    #             connect.close()
    #     return result
    

      

     三、日志模块(nnlog模块)
       在开发工作中,经常需要打印日志来进行代码调试和定位问题,本次采用nnlog模块来打印日志 

       日志级别:

       info:打印所有详细信息,最低级别

       debug:一般只用来测试环境中调试代码

       warning:警告,一般用于提示警告信息

       error:最高级别,只打印出错的error信息

        

    #nnlog模块基本用法
    import nnlog
    log = nnlog.Logger('python.log')
    log.warning("xxxx")
    log.info("xxx")
    log.debug("xxxx")
    log.error("xxxx")
    

      效果:

    使用nnlog日志模块实例:

    # import pymysql
    # import nnlog#引用日志模块
    # import traceback#获取系统报错日志模块
    # log = nnlog.Logger('python.log',level='debug',backCount=5,when='D')#日志输出为python.log文件,级别为debug,最多保留5个日志超过5天的自动覆盖掉,每天产生日志
    # mysql_info = {
    #     'host':'****',
    #     'port':3306,
    #     'db':'***',
    #     'password':'****',
    #     'charset':'utf8',
    #     'autocommit':True,
    #     'user':'***'
    # }
    # 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.debug("开始建立游标")
    #         cur = connect.cursor(pymysql.cursors.DictCursor)
    #         try:
    #             log.debug("开始执行sql")
    #             log.info("sql语句是%s"%sql)
    #             cur.execute(sql)
    #         except Exception as e:
    #             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")

      返回结果如下:

        

  • 相关阅读:
    php集成开发环境搭建三种方式
    阿里云服务器ftp连接后21端口无法使用的问题
    Linux CentOS7 安装FTP服务器
    WIN10分盘
    转载:常见的正则表达式
    转载:什么是分布式系统中的幂等性
    会员通过消费攒积分,升级RENEW以及降级的需求
    CASSANDRA How to import and export data
    tmp for cassandra batch delete
    SQL Insert Case When Update
  • 原文地址:https://www.cnblogs.com/bugoobird/p/12970197.html
Copyright © 2011-2022 走看看