一、出现异常
比如在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")
返回结果如下: