异常捕获
什么是异常
代码运行出错会导致异常,异常发生后如果没有解决方案则会导致整个程序结束
异常三个重要组成部分
1、traceback
翻到最下面从下往上的第一个蓝色字体鼠标左键点击即可跳转到错误代码所在的行
2、xxxError
错误的类型
# 1、 print(idna) # NameError # 2、 l = [11,22,33] print(l[100]) # IndexError # 3、 d = {'username':'jason'} print(d['xxx']) # KeyError # 4、 int('abc') # ValueError
3、错误类型冒号后面的内容
错误的详细原因(很重要,仔细看完之后可能会找到解决方法)
错误的语法
1、语法错误
不被允许出现,出现了立马修改
2、逻辑错误
可以被允许,出现之后尽快修改即可
修改逻辑错误的过程其实就是在从头到尾理清思路的过程
异常捕获句式try的使用
1、基本语法格式
try: 有可能会出错的代码 except 错误类型 as e: 出错之后对应的处理机制(e是错误的详细信息) except 错误类型 as e: 出错之后对应的处理机制(e是错误的详细信息) except 错误类型 as e: 出错之后对应的处理机制(e是错误的详细信息)
try: int('abc') except NameError as e: print('变量名name不存在',e) except ValueError: print('值不是纯数字')
# 这样就不会报错
万能异常
格式:
try: int('abc') print(name) l = [11] l[100] except Exception: print('你来啥都行 无所谓')
异常捕获句式和万能异常使用
1、有可能会出现错误的代码才需要被监测
2、被监测的代码一定要越少越好
3、异常捕获使用频率越低越好
异常捕获的一些补充
else、finally、assert、raise
try: l = [] l [100] except NameError as e: print('名字错误') except KeyError as e: print('键错误') except IndexError as e: print('索引错误') else: print('当被监测的代码没有报错 正常运行结束之后会走') finally: print('无论被监测的代码是否报错 最终都需要走一下这里的子代码') # 断言 name = 'jason' assert isinstance(name,str) # 主动报错 # raise+c指定的错误类型 raise NameError