1、异常处理
try except语句,至少要有一个except,也可以有多个except,也可以有一个else语句,一个finally
# try except语句,至少要有一个except,也可以有多个except,也可以有一个else语句,一个finally
try:
num=int(input('请输入整数:'))
print(9/num)
except ZeroDivisionError: #已知具体异常
print('0不能作为分母')
except ValueError: #已知具体异常
print('你输入的不是整数')
except: #任何异常都可以捕获,兜底用 或者这么写 except Exception as e:
print('程序出现错误')
else: #程序没有出现异常,则会执行else的语句
print('输入正常')
finally: #无论程序是否出现异常,都会执行,一般放在最后,会在最后执行
print('执行完毕')
2、常见异常 :
常见异常 ZeroDivisionError 分母是0 ValueError 赋值错误 NameError 未定义变量 IndexError 下标越界 FileNotFoundError 找不到文件 所有的异常,都是Exception的子类,或者子类的子类 print(NameError.__bases__) print(ValueError.__base__) print(ImportError.__base__)
3、异常日志捕获
日志等级:一般写 warning或者error等级
# logging.debug('日志debug')
# logging.info('日志info')
# logging.warning('日志warning')
# logging.error('日志error')
# logging.critical('日志critical')
logging模块
# 日志 logging模块,可以配合try except语句记录日志
import logging
import traceback
#填写报错得等级,存储得位置
logging.basicConfig(level='WARNING',filename=r'D:\A_daily\file1.txt',filemode='a')
try:
num=int(input('请输入整数:'))
print(9/num)
except ZeroDivisionError: #已知具体异常 #具体什么时间报错,报的原汁原味错误
logging.error(time.strftime('%d-%m-%d %H:%M:%s')+traceback.format_exc()) #具体什么时间报错,报的原汁原味错误
except ValueError: #已知具体异常
logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc()) #具体什么时间报错,报的原汁原味错误
except: #任何异常都可以捕获,兜底用 或者这么写 except Exception as e:
logging.error(time.strftime('%y-%m-%d %H-%M-%S')+traceback.format_exc()) #具体什么时间报错,报的原汁原味错误
else: #程序没有出现异常,则会执行else的语句
print('输入正常')
finally: #无论程序是否出现异常,都会执行,一般放在最后,会在最后执行
print('执行完毕')
loguru模块,是第三方库需要安装,比起logging,要好用
1、
import os
from loguru import logger
# logger.debug('打印debug')
# logger.info('打印info')
# logger.warning('打印warning')
# logger.error('打印error')
# logger.critical('打印critical')
if not os.path.exists('.\log'):
os.mkdir('.\log')
logfile='.\log\log1.log'
logger.add(logfile,rotation='200KB') #rotation拆分日志文件,文件日志200KB,去掉rotation不拆日志文件
for i in range(10000):
logger.info('damihexiaomi')
2、日志文件压缩
import os
from loguru import logger
import traceback
logger.debug('打印debug')
logger.info('打印info')
logger.warning('打印warning')
logger.error('打印error')
logger.critical('打印critical')
if not os.path.exists('.\log'):
os.mkdir('.\log')
logfile='.\log\log1.log'
logger.add(logfile,rotation='200KB',compression='zip') #rotation拆分日志文件,没有日志200KB
for i in range(10000):
logger.error('damihexiaomi')
3、捕获日志写入压缩文档
import os
import time
from loguru import logger
import traceback
try:
# num = int(input('请输入整数:'))
for one in range(1000):
# print(one/num)
print(one/0)
except: #任何异常都可以捕获,兜底用 或者这么写 except Exception as e:
if not os.path.exists('.\log'):
os.mkdir('.\log')
logfile = '.\log\log1.log'
logger.add(logfile, rotation='10KB',compression='zip')
logger.error(time.strftime('%y-%m-%d %H-%M-%S')+traceback.format_exc()) #具体什么时间报错,报的原汁原味错误
4、 捕捉调用函数的异常日志
import os
import time
from loguru import logger
import traceback
def fun1(a,b):
return a/b
try:
fun1(2,0)
except:
if not os.path.exists('.\log'):
os.mkdir('.\log')
logfile = '.\log\log1.log'
logger.add(logfile, rotation='10KB',compression='zip')
logger.error(time.strftime('%y-%m-%d %H-%M-%S')+traceback.format_exc())
5、在linux查看日志的时间,一般用tail