异常处理
非正常,没有达到预期目标;
是一个事件,并且这个事件在我们程序的运行过程中出现,会影响程序的正常运行。
两种: 1.语法错误导致的异常; 2.逻辑错误导致的异常
常见异常类 : 网上都有
如何处理:
如果错误发生的情况可以预知,那么就可以使用流程控制进行预防处理
如果错误发生的情况不可预知,那么可以用try…except…在错误发生时进行处理
try except用法
1.不指定错误类型,只要发生就进入except:
try:
# 可能发生异常错误的代码
list_1 = ['1']
print(list_1[2])
except:
# 如果发生异常则进入except代码块进行处理
print('Error')
# Error
2.指定异常类,不是指定的异常类就不进入:
try:
print(a+b)
except IndexError as e :
print('IndexError')
# NameError: name 'a' is not defined
3.可以多分支处理异常类:
try:
print(a + b)
except IndexError as e:
print('IndexError')
except NameError as n:
print('NameError')
# NameError
4.通用异常类 Exception:
try:
print(a + b)
except Exception as e:
print('Error')
# Error
5.可以多分支+通用处理异常类:
try:
print(a + b)
except IndexError as e:
print('IndexError')
except Exception as t:
print('Error')
# Error
6.try…except…else :
try:
a = 1
except IndexError as e:
print('IndexError')
else:
# try代码块中没有发生异常时,执行这个区间
print('True')
# True
7.try…except…else…finally :
try:
a = 1
except IndexError as e:
print('IndexError')
else:
print('True')
finally:
# 无论是否发生异常,都会执行这个代码块
print('Over')
# True
# Over
8.使用raise主动抛出异常:
a = 2
try:
if a != 1 :
raise Exception('Error',a)
except IndexError as e:
print('IndexError')
# Exception: ('Error', 2)
9.断言语句 assert:
assert 2 == 1
# AssertionError
assert 1 == 1
#
自定义异常处理类
1.当异常出现时,对异常信息进行处理并写入日志:
日志的基本格式:
日期时间 异常的级别 异常信息:引发的异常类,异常的信息,文件及行号
2.import traceback,logging 日志模块:
通过回溯和logging模块获取异常信息
import traceback
import logging
try:
int('aa')
except:
errormsg = traceback.format_exc()
logging.error(errormsg)
print(errormsg)
# ERROR:root:Traceback (most recent call last):
# File "(文件地址)", line 129, in <module>
# int('aa')
# ValueError: invalid literal for int() with base 10: 'aa'
# Traceback (most recent call last):
# File "(文件地址)", line 129, in <module>
# int('aa')
# ValueError: invalid literal for int() with base 10: 'aa'
3.自定义异常日志处理类:
class My():
def __init__(self):
import traceback
import logging
# logging基本配置
logging.basicConfig(
filename='./error.txt', # 存储的文件及目录
format='%(asctime)s %(filename)s : [line:%(lineno)d] %(levelname)s', # 格式化存储的日志格式
datefmt='%Y-%m-%d %H:%M:%S', # 时间的格式
)
logging.error(traceback.format_exc())
4.使用异常日志处理类:
try:
int('aa')
except:
My()
# error.txt -> 2020-06-29 12:49:59 异常处理.py : [line:159] ERROR