python 异常处理
异常处理
1.什么是异常?异常和错误的区别
Error 语法错误,比较明显的错误,在编译代码阶段就能检测出来
Iterration 异常 在执行代码的过程中引发的异常
异常一旦在程序中发生,程序就不再继续执行了
2.最简单的异常处理: try:pass except IndexError: print(‘定制异常时的输出内容’)
基本结构为: try代码下同级加入except; 用这种异常处理办法时,可在try后同级无限累加各种要
except的错误类型,如try / except valueerror / except indexerror........
只要符合其中一个错误类型,该类型之后的所有except都不会再执行.
3.万能异常: Exception 是所有异常的祖宗类,所以用它可接下所有的错误信息
try:
{}[‘key’]
except Exception as 变量名:
print(type(变量名), 变量名, 变量名.__traceback__.tb_lineno) 可得到错误行数的提示
分析:(except Exception as 变量名)这种形式中的变量名是个对象,当try下逻辑代码非常多时,但凡报错时的错误信息就
会被变量名这个对象全部给接受下来,直接打印可看到python提示的出错信息.该对象有很多内置方法,可用来自定
义异常时我们想要输出的内容和格式.例中print这种形式会显示出该错误的类型,出错地方,以及出错的行号.
4.万能异常和其它分支合用时,万能异常永远要放在所有except分支的后面,不然所有的错误都会被万能异常给接受处
理掉,except分支就永远无法生效.
5. try--->except--->else连用时,有且只有try中代码没有异常时才会执行else下的代码
try--->except--->else--->finally连用时,无论执行的是except还是else,finally下的代码都会被执行,主要用在当程序出现
异常时能及时归还操作系统资源,及操作些其它重要事情. 注意:即使finally跟在函数内的return或者循环中的break后
也能执行其下代码,理解为只要不是电脑断电,其余无论何种情况时都会被运行
6.异常处理时常用的连用形式:
try/except
try/except/else
try/except/else/finally
try/except/finally
try/finally
7.主动抛出异常:
try:
num = int(input('>>>'))
except Exception: 先抓住异常先不让它报错
print('在出现了异常之后做点儿什么,再让它抛异常')
raise 此处单放一个raise表示原封不动的抛出try语句中出现的异常
8.自定义异常:
1) 通用用法: raise NameError('这是一个name error的异常') 直接拿来就能用
2) class EvaException(Exception): 自定义个类,注意必须继承exception父类
def __init__(self,msg):
self.msg = msg
raise EvaException('自定义描述错误信息') 调用类生成对象,再抛出定义的描述信息
9.断言: 用法: assert +布尔值
类似于if判断,布尔值为True则往下执行代码, 否则就直接报错. 好处是其下代码都不用缩进,直接
顶头写即可. 这东西只会在源码中出现,我们程序中不会用上.
总结: 尽量少用异常处理,能通过逻辑规避的应该用代码逻辑来规避掉,要用也应该对某一句或几句话
来进行处理. 写完整体逻辑后在最外层添加一个大得异常处理来提高程序的稳定性.