python异常处理 异常装饰器 抛出异常 断言(python异常处理机制中没有什么语句)

网友投稿 435 2022-09-01


python异常处理 异常装饰器 抛出异常 断言(python异常处理机制中没有什么语句)

一、异常处理

1.什么是异常?

程序在运行过程中出现了不可预知的错误 并且该错误没有对应的处理机制,那么就会以异常的形式表现出来 造成的影响就是整个程序无法再正常运行

2.异常的结构:

类型   信息   位置

3.异常的种类

1.语法错误

是你程序立刻就能解决的,这种错误是不能被容忍的

语法上的错误 发现之后应该立刻解决

2.逻辑错误

这种错是可以被容忍的 因为一眼看不出来 针对逻辑上的错误 可以采用异常处理机制进行捕获 常见的错误类型: NAMERROR 名字错误 SyntaxError 语法错误 KeyError 键不存在 ValueError 值错误 IndexError 索引错误

4.常规异常处理

错误发生之后 会立刻停止代码的运行执行except语句 比对错误类型支持多个except

try: name l = [1,2,3] l[111] d = {'name':'jason'} d['password']except NameError: print('NameError')except IndexError: print('indexerror')except KeyError: print('keyerror')finally:   print('不管出不出错最后都走这里,可以用来关闭文件等资源')

5.万能异常处理

try: name l = [1,2,3] l[111] d = {'name':'jason'} d['password']except Exception: # 万能异常 所有的异常类型都被捕获 Exception继承BaseExcept,这里也可以写他爸爸 print('老子天下无敌')else: print('被检测的代码没有任何的异常发生 才会走else')(咱也不知道有啥用)finally: print('无论被检测的代码有没有异常发生 都会在代码运行完毕之后执行我')(打开文件后不管处不出错都关闭文件)

6.主动抛出异常

# 主动抛异常if 'egon' == 'DSB': passelse: raise TypeError('尽说大实话')

7.异常装饰器

# 异常装饰器,处理函数的异常def entry_wrap(func): """ 如异常会截图,并返回: {'error': type, 'msg': error_message, 'error_img': screenshot_path} 如果正常,则返回: {'content': function_return_value } """ def wrapper(*args, **kwargs): try: content = func(*args, **kwargs) # 被装饰任务的返回值 result = {'content': content} # 正常情况下这样返回 except TypeError as e: # 指名道姓捕捉,try中代码执行遇到TypeError后走这下面 result = {'error': 'TypeError', 'msg': e} except BaseException as e: # 其他所有异常走这下面 result = {'error': '其他未知错误', 'msg': e} if 'error' in result: try: # 这里可以做一系列功能,如对错误的页面截图,返回结果中增加截图路径 result['error_img'] = 'screenshot_path' except: pass return result return wrapper@entry_wrap # 函数一旦被装饰,返回结果就由装饰器的返回值决定,不再是函数自己原汁原味的返回结果def test(name): try: # 正常情况走这里 name += 1 return {'name':1,'age':2} except: # 捕捉所有异常 name += [] name.split('|') return {'error': 'code', 'msg': 'error_message',} finally: # 出不出错最后都一定会走这里,这里面可以进行文件资源关闭操作 passno_error = test(1)print(no_error) # 正常输出error_1 = test('a|b')print(error_1) # TypeErrorerror_2 = test([1,2])print(error_2) # BaseException -> AttributeError"""{'content': {'name': 1, 'age': 2}}{'error': 'TypeError', 'msg': TypeError('can only concatenate str (not "list") to str'), 'error_img': 'screenshot_path'}{'error': '其他未知错误', 'msg': AttributeError("'list' object has no attribute 'split'"), 'error_img': 'screenshot_path'}"""

8.自定义异常

class MyError(BaseException): def __init__(self,msg): super().__init__() self.msg=msg def __str__(self): return '' %self.msg#raise MyError('我自己定义的异常') # 主动抛出异常其实就是将异常类的对象打印出来,会走__str__方法#异常信息:

9.断言

l = [1,2,3]assert len(l) < 0 # 断言 预言# 猜某个数据的状态 猜对了 不影响代码执行 正常走# 猜错了 直接报错


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关键字 + yaml数据 驱动设计— Selenium二次封装与集成(Unittest+ddt+PyYMAL)(关键字歌曲)
下一篇:python的深浅拷贝原理 python值传递和引用传递(python中的深浅拷贝)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~