异常处理
拍错的时候 真正报错的是在最下面
python 的代码是不会出错的应该从下向上找最后一行自己写的代码去处理
异常处理的应用:
1可以使用if 规则,但是成本太高
2不能用if 处理了 StopIteration
异常处理的特点,一旦发生异常,程序就不再执行
try: num=input('num:') int(num) #ValueError print(num) except ValueError: print('请输入一个数字')
放在try中的代码如果遇到except 中的错误类型,就会执行except中的代码
且一旦发生异常,try中的代码会停止在异常处
但是不影响try语句之外的代码执行
一种错误类型只能处理对应的一种错误,其他错误还会照常报错
try: num=input('num:') int(num) #ValueError print(num) a sum(1,2,3) except ValueError: print('请输入一个数字') except NameError as nameerror: print('产生一个 %s'%nameerror) except TypeError: print('又一个错误诞生了')
as
在我们不能完全明确的知道这个错误到底是发生了什么的时候
就用as 变量名,将变量中存储的错误信息打印处理
万能异常
try: num=input('num:') int(num)#ValueError b #NameError dic={} dic['key'] #KeyError l=[] l[1000] #IndexError l=[1,23] l_iterator=iter(1) next(l_iterator) next(l_iterator) next(l_iterator) #StopIteration except ValueError: print('请输入一个数字') except Exception as e: print(e)
对于你已经可以预见的但是不能完全规避的必须要处理异常,
你应该去指定他的处理方式
对应你不能预料的, 再使用万能异常处理
异常处理中的else语句
try: a=1 except NameError as e: print(e) else: print('当try语句中不会发生异常的时候执行else中的代码啦') finally def func(): try: f=open('file') int(f.read()) except ValueError as e: a=123 return a finally: f.close()
def wrapper(func): def inner(*args,**kwargs): try: return func(*args,**kwargs) finally: '被装饰的函数执行之后要执行的内容' return inner
try: f=open('file') int(f.read()) except ValueError: print('读文件失败了') except Exception as e: print(e) else: print('成功了') finally: f.close() def func(): assert 1==2 print(123) print(456)