一、错误与异常的区别:
1、错误
语法错误:代码不符合解释器或者编译器的语法,例如 缩进字符、循环语句的冒号
逻辑错误:不完整或不合法输入、算法问题,比如0作除数
2、异常
程序遇到逻辑或者算法问题
运行过程中计算机错误(内存不够或IO错误)
这两个或抛出异常,如果没有手动对其进行处理,那么此异常就会被解释器捕获,处理的方法
为忽略或者终止程序
3、错误和异常的区别:
错误是代码运行前
错误是非正常的,不应该出现的
异常是代码运行时产生的 ,解释器检测到错误你并且认为是异常,抛出异常
如果不捕获处理可能会终止程序
常见异常类型:
1,# AttributeError: 'str' object has no attribute 'yy',属性错误。AttributeError:尝试访问未知的对象属性
# a = 'xxx'
# a.yy()
2,ValueError: invalid literal for int() with base 10: 'abc',传入的类型不对
# int('abc')
......
二、异常机制:
- 异常发生不终止程序
- 异常发生做特殊处理
- 不终止程序也要做特殊处理
三、异常处理机制
1 try-except格式的异常处理机制
:异常捕获,如果捕获到了异常就处理except里的内容,
遇到异常之后的try监控的这段代码后面不执行了(就出错的地方后面不执行),捕获except里面的,匹配到一个except之后就会跳过try except捕获,执行后面的代码,
如果except捕获的异常与触发的异常错误不一样,就会抛出异常,
父类异常与子类异常:父异常可以捕获所有子类异常,一般建议父类异常放在最后,因为如果捕获到错误不好排查是出现那种类型的错误,
2 try-except-else的格式
(1)有异常的时候else不执行
(2)没有异常的时候else会执行
3 finally,不管有没有异常,不管异常有没有被捕获,都会执行finally里的语句
4,raise手动触发异常
raise--不加其他参数。在except语句中,引发当前上下文中捕获异常,或默认引发RuntimeError。
raise 异常类--raise后面带一个异常类名称,表示引发执行类型的异常
raise 异常类(异常信息)--在引发指定类型的异常,同时附带异常的描述信息。
一旦执行了raise语句,raise后面的语句将不能执行。



