异常处理
报错时候前面是错误类型,后面是异常说明上面是异常的追踪信息
真正报错的是最后一行
如果错误跳到内置代码,python的代码不会出错,那么就往上找自己代码的错误
a #NameError sum(1,2,3)#TypeError dic={} dic['key'] #KeyError l=[] l[index] #indexError l=[1,23] iter(l) l_iterator=iter(l) next(l_iterator) next(l_iterator) next(l_iterator)#StopIteration num=input('num') int(num) #不输入数字#ValueError
异常处理的应用
1.可以用if规避,但是成本太高。
2.不能用if处理了,StopIteration
异常处理的特点:一旦发生异常,程序就不再执行了
try: num=input('num:') int(num) print(num) except ValueError: print('请输入一个数字')
放在try中的代码如果遇到except中的错误类型,就会执行except中的代码
且一旦发生异常,Try中的代码会停止在异常处
但不影响try语句之外的代码执行
一种错误类型只能处理对应的一种错误,其他错误还会照常报错
try: num=input('num:') int(num) print(num) a=1 sum(1,2,3) except ValueError: print('请输入一个数字') except NameError: print('NameError') except TypeError: print('产生了一个TypeError')
可以多个except套用,如果中间的错误了,下面的错误也不会执行
程序跑的很好的时候ctrl+c让他停止,会发生一个异常keyboardInterrupt
try里面最好不要调用函数
except ValueError as valueerror: print('产生了一个%s'%valueerror)
as语句,as后面的变量就是错误的具体
as 在我们不能完全明确的知道这个错误到底是发生了什么的是时候就用as 变量
将变量中存储的错误信息打印出来
except Exception万能异常:
对于你已经可以预见的但是不能完全规避的必须要处理的异常,你应该去指定他的处理方式
对于其他你不能预料的,再使用万能异常处理
万能异常和其他异常处理一起用时候,其他异常处理要放在上面
异常处理中的else语句
try: a except NameError as e: print(e) else: print('执行else中的代码啦')
try语句正确执行没有发生异常才去执行else
一般else是来看是否执行成功给一个回执
try: a except NameError as e: print(e) finally: print('执行finally中的代码啦') finally可以最后必须执行,一般是关闭文件 try: f=open('file') int(f.read()) except ValueError: print('读文件失败') except Exception as e: print(e) else: print('成功') finally: f.close()
完整异常处理的一套例子 代码执行成功时执行else 出现ValueError异常执行第二个
别的异常执行万能异常处理,最后必须要执行finally(遇见return也执行)
raise 触发异常用的,后边加异常,主动报异常
assert 断言 后边是条件 不符合条件就报错