异常处理\捕获异常

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值