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