一、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
不出异常的时候走到这里
不管什么时候都会走这里呢
原文:https://www.cnblogs.com/MLing/p/12967815.html