2019/11/28 02-异常概念、产生和捕获

2019/11/28 02-异常概念、产生和捕获
错误是error
逻辑错误:算法写错了,加法写成了减法,
笔误:变量名写错了,语法错误
函数或类使用错误,其实这也属于逻辑错误
总之,错误是可以尽可能的避免的
异常是exception
没有做错事情,出现意外,导致计划泡汤,意外往往无法避免,由你不可掌控的原因控制的,有些系统太过复杂是无法预测的,异常是无法感知的,所以是无法直接去避免的,但是错误是可以避免的
2019/11/28 02-异常概念、产生和捕获
在高级语言中,一般都有异常和错误两个概念,异常是可以捕获的,并被处理的,但是错误是不能够被捕获的

有些错误是可以引发异常,可以捕获异常,但是是由错误引起的,错误本身是不可捕获的

文件不存在会抛出异常,这种异常是可以被捕获的
2019/11/28 02-异常概念、产生和捕获
现在抛出的异常是文件不存在异常
2019/11/28 02-异常概念、产生和捕获
如果发生错误,语法错误,也是Error结尾的
2019/11/28 02-异常概念、产生和捕获
python比较奇怪,把语法错误放到异常类的体系里面2019/11/28 02-异常概念、产生和捕获2019/11/28 02-异常概念、产生和捕获
一种是代码因为某些原因发生异常,还有一种是通过raise方法,手动抛出一个,这样就可以手动产生一个异常出去2019/11/28 02-异常概念、产生和捕获
2019/11/28 02-异常概念、产生和捕获
如果不对产生的异常做处理,就会影响现在的程序执行

2019/11/28 02-异常概念、产生和捕获
不出现错误捕捉和处理的话,就影响程序的执行,从出现异常向后的代码,不做捕获处理就没法执行,直接中断当前函数执行,中断当前线程执行
2019/11/28 02-异常概念、产生和捕获
异常是在运行中确实达到某种条件,这个条件就产生异常,会提前结束线程的执行
2019/11/28 02-异常概念、产生和捕获
raise语句可以什么都不写
raise后面写类名,就是调用这个类的无参构造
2019/11/28 02-异常概念、产生和捕获
提示应该有最近一次被**的异常,这里没有就直接报错2019/11/28 02-异常概念、产生和捕获
可以直接在后面放类,放类,就会调用这个类的无参构造
2019/11/28 02-异常概念、产生和捕获
无参构造,其实里面有默认值
2019/11/28 02-异常概念、产生和捕获
这个是传了参来构造
2019/11/28 02-异常概念、产生和捕获
这两条是相等的,上面写成这样就会调用下面的无参构造
2019/11/28 02-异常概念、产生和捕获2019/11/28 02-异常概念、产生和捕获
没有这个文件就直接报错2019/11/28 02-异常概念、产生和捕获
出现错误就终止语句完成,在try里才会尝试去捕捉异常,当前产生异常的地方,就不再往下执行,except来处理这个异常怎么做2019/11/28 02-异常概念、产生和捕获
只要有地方把异常处理完后,就可以继续向下执行,try里面出现的异常,after就不执行了2019/11/28 02-异常概念、产生和捕获2019/11/28 02-异常概念、产生和捕获
try里面先执行2019/11/28 02-异常概念、产生和捕获
如果没有捕获,就只能打印个before,没有替你捕获2019/11/28 02-异常概念、产生和捕获
函数内部的异常如果没有补货,就会继续向外抛出,这样打印的效果是跟刚才一样的,这就是从函数内部传送到函数外部2019/11/28 02-异常概念、产生和捕获2019/11/28 02-异常概念、产生和捕获
except是在处理异常,处理过了,就继续向下执行
2019/11/28 02-异常概念、产生和捕获
还可以捕获特定的异常,不但没打印,而且直接报错,捕获是否是Indexerror这种错误的异常,这里就相当于file not find 异常捕获了但是没人处理,没人管就抛出去了
2019/11/28 02-异常概念、产生和捕获2019/11/28 02-异常概念、产生和捕获2019/11/28 02-异常概念、产生和捕获
这回就抛出异常2019/11/28 02-异常概念、产生和捕获
except后面什么都没写,就是什么异常都捕获2019/11/28 02-异常概念、产生和捕获
这是捕获特定异常,算术异常2019/11/28 02-异常概念、产生和捕获
code1,红色代表是标准输出2019/11/28 02-异常概念、产生和捕获2019/11/28 02-异常概念、产生和捕获
raise看起来像是什么异常都能抛出,但是肯定不是这么玩的2019/11/28 02-异常概念、产生和捕获