异常处理
try except语句中,至少要有一个except,也可以有多个.也可以加上一个else语句,一个finally语句.
如下
try:
int1=int(input('请输入一个数字: '))
print(1/int1)
except ZeroDivisionError: #0作为分母的异常
print('0不能作为分母')
except ValueError: #输入的是非数字的异常
print('您输入的不是数字')
except: #如果不指定异常类型,则捕获任何出现的异常
print('程序出现错误')
else: #当程序未捕获到任何异常,会执行else中的语句
print('没有出现异常')
# finally: #无论程序是否出现异常,都会执行
finally:
print('程序执行完毕')
常见的异常
- NameError 未定义的变量
- IndexError 下标越界
- FileNotFoundError 找不到文件异常
所有的异常,都是Exception的子类,或者子类的子类,Exception也有一个父类 BaseException
print(NameError.__base__)
print(IndexError.__base__)
print(LookupError.__base__)
print(FileNotFoundError.__base__)
print(OSError.__base__)
print(Exception.__base__)
手动抛出异常
try:
raise IOError # 假装这里有异常
except IOError:
print('程序出现了IO错误')
日志模块
日志等级,默认打印WARNING以上级别,可以设置level改为别的级别
import logging
logging.basicConfig(level='DEBUG')
logging.debug('出现debug信息')
logging.info('出现info信息')
logging.warning('出现warning信息')
logging.error('出现error信息')
logging.critical('出现critical信息')
将异常信息记录到日志
time.strftime('%y-%m-%d %H:%M:%S') 记录时间
traceback.format_exc() 返回异常的信息
实例说明如下:
import time
import logging
import traceback
logging.basicConfig(filename='D:/log210607.log',filemode='a+')
try:
int1=int(input('请输入一个数字: '))
print(1/int1)
except ZeroDivisionError: #0作为分母的异常
logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc())
except ValueError: #输入的是非数字的异常
logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc())
except: #如果不指定异常类型,则捕获任何出现的异常
logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc())
loguru
import os
from loguru import logger
logger.debug('你好')
logger.info('你好')
logger.warning('你好')
logger.error('你好')
logger.critical('你好')
if not os.path.exists('./log'):
os.mkdir('./log')
logfile='./log/log1.log'
logger.add(logfile,rotation='200KB',compression='zip') #rotation拆分日志文件,每个日志200KB,compression压缩日志
logger.remove(handler_id=None) #这句代码表示信息不在控制台显示
for i in range(10000):
logger.info('松勤')
def fun1(a,b):
return a/b
try:
fun1(2,0)
except:
logger.exception('报错')













网友评论