00:00
好,那我们接下来来说如何捕获到我们那个异常对象,那我们这里边呢,为了演示这个问题啊,我们来新建一个文件啊零二我们就叫做一个异常对象,呃,异常对象点一个PY,那这里边我们要说一个什么呢?还是我们直接在这写吧,哎,直接在这写,呃,我们在说它之前呢,我们还是先把这个问题给体现出来,在这儿我们直接写一个print,这是我们这个异常,哎,出现前,诶出现前,然后再往下我们再来一个print,这个是什么呢?诶,这个是我们这个异常出现后啊,出现后然后再我们写一个,哎,那我们就还是那个老异常了,我们直接写一个这个十除以零,这个是出现异常代码,我们这一执行很明显,是不是我们这个第三行就出现异常了,诶第三行出现异常了,那现在我们之前的方式怎么办?我们是不是踹它一脚啊,诶直接来一个这个踹,诶踹一下,然后呢,在这儿我们可以来一个这个except啊。
01:00
Except在这儿呢,我们直接写一个,诶写一个print啊,这个是我们这个,诶处理我们这个异常的一个代码啊,处理异常代码,那这大家注意啊,我们现在写这种东西都没有什么意义,出现异常以后你打印,像我这个出现异常以后打印,哈哈出错了,这个东西没有什么任何的意义,我们真正去做的时候,这儿应该放的是我们处理异常代码,就说出现这个异常了,你要怎么去处理啊,怎么去处理,所以在这儿我们还是只是一个演示啊,那现在在这儿我们是不是就可以去处理这个异常了,哎,处理这个异常啊,直接保存我们这一执行。是不是就可以了,哎,就可以去处理这个异常了,那接下来我们现在说了,刚才我们提到了一嘴什么呀,当我们出现异常的时候,实际上所有异常信息是不是都封装到一个对象里啊,诶都封装到了一个对象里,他是,诶那我们就要说我们怎么来获取这个对象,那说这个玩意儿之前,我们先说一个问题啊,先说一个问题,那现在我们来看啊,我在这现在写一个print一个C啊,PRINT1C,那现在在我们TRY里边实际上有两个语句,一个是print c,还有一个是PRINT10除以零,那实际上这两行语句是不是都会出错,哎,都会出错,那这个错误两个错误还不一样,这是一个name error,而这个是我们除流那个错误,对吧,两个错误是不一样的,当然现在我直接写了一个except,直接写了一个except,它会干嘛呢?它会捕获到我们所有错误,也就是说无论你是,诶,你是什么呀,你是这种name error,还是我们这个除流的错误,他都会被捕获到啊,都会被捕获到。
02:35
所以这块我们来说一下啊,我把这个粘过来啊,粘过来啊,直接在这说吧,我就不在这个笔记里写了啊,直接说那这里边我们来说了,如果我们这个except,诶except后它不跟什么呢?诶不跟任何的这个内容啊,内容则此时他会什么呢?诶他会捕获到捕捕获啊就抓住意思是吧,捕获到我们这个所有的异常啊,捕获到所有常就说无论你是什么错,你是name error也好,你是除了的错误也好,你还是index也好,是type error也好,是什么错误都不管,只要是错误都会被他捕获到,那这个时候实际上就会带来一个问题,什么问题,这的确是捕获到的异常了,但是这里捕获到的是什么异常,是name error还是除灵的错误呢,还是隐。
03:35
呢,在这里我们是不是没有办法看到,没有办法看到,所以注意在后边还可以跟一个东西,我在这里直接补充,可以跟什么呢?诶可以跟我们的一个一个类,异常的一个什么呀,类型,注意跟的是一个类啊,跟的是一个类,所以在这我们直接演示,比如说现在在except后边,我直接跟一个name error,直接跟一个name error,注意刚才我们说了这个是一个类啊,是一个类,那我现在直接跟了一个name error,那什么效果直接说了,哎,如果在我们这个except后,哎跟着。
04:16
一个这个异常的类型啊类型,那么此时他只会捕获,只会捕获该异常,该类型的异什么意思,刚才我Excel后边什么都没写,什么都不写,就什么都来,什么都不会,但是现在我后边是不是跟了一个异常啊,哎,跟了一个异常类型,那这个时候它实际上就只会捕获什么内measure,那这里边我们来写一个,哎这写一什么呢?诶这写一个出现,诶出现我们这个什么呀?哎,Name error这个什么呀,异常啊,出现这个异常,那现在来看啊,我们现在来看print c是不是就一个name error,直接一保存,我们这一执行是不是就捕获到name error了,哎,出现name error这个异常,但是你说了,老师如果不出现name error呢,我这块把。
05:17
把那代码我给它注了以后,现在就没有name error了,现在是不是一个这个除灵的错误呀,哎,除灵的错误这个时候一保存我一执行,有没有捕获这个zero一个error,哎,并没有捕获这个异常,为什么?因为在这我已经指定了要捕获什么什么异常,除他以外的异常,他干嘛他都不会补货啊,他都不会补货,那你说了我还我想既捕获name I又捕获这个除了异常怎么办?哎,那有一种方式,你就不写呗,你不写所有异常都会补货,但是这种方式也不好,因为你不知道到底出了什么错,对吧?所以如果你还想补货,除了那异常怎么办?你可以再写一个except except哎,不限制数量,想写几个都行,有点像我们这个I if啊l if直接我再来一什么呢?哎,我们这个zero division一个error,那这个时候这个它就会干嘛呢,它就会捕获到我们这什么呀,哎,这个zero这个division error这个异常啊,捕获这个异常这一保存现在来看。
06:17
一执行是不是出现这个异常了,所以现在的效果就是出这个错误就捕获,哎出现内error就执行它出现zero,哎,Division error就执行什么呀?哎执行这个东西,哎,你说他可以干嘛呀,捕获到我们这个指定的异常啊,捕到我们这个指定异常就这样一个效果啊,但是是这么写完了以后就会有一个小局限,就是说它只能捕获这个异常,假如说现在我们说看着啊,我现在先写一个print c,这一执行是捕获这个name error,我把普C助调这也补,是不是捕获这个除零的呀,但是有些什么情况呢?我写一个,我直接写一个L等于一个中号,我直接写一个空的列表啊,空的列表,然后我这来什么呢?哎,我在这写一个L中号,一个十,取到列表里边第十个元素,很明显一个都没有对吧?十肯定也没有,所以这一执行,这是一个index,那这时候会不会补货呀,他说没补货,你要想补货怎么办啊,那OK,很简单,你再加一个什么呀?哎,再加一个except啊except所。
07:17
这个时候注意我们捕获异常的两种方式,一种你是捕获所有的,一种你是捕获什么呀,指定的,那这样你就需要把这个类干嘛呀,都给它列出来啊,都给它列出来这种方式,或者你就直接写一个什么呀,直接写一个except,它就会捕获所有异常了,哎,那你也可以干嘛呢?诶你也可以在后边加一个except,后边什么也不写,什么也不写,我们直接写一个,那这就会捕获什么呀,所有异常,那这个效果就什么呀,先看看是不是name error,再看看是不是zero这个再看看是不是index,如果都不是,是不是就到这儿了,就相当于一个l if,那这个我们可以写什么呀?哎,写一个这个未知异常啊,未知异常这一保存一知行语法是没有问题的,对吧?那好,那未知异常以后,有了它以后,我再写一个,我在上边我写什么呢?我写一个一加上一个hello,一加上一个hello,那这两个东西是不能加的,对吧,我们这一执行,诶是不是未知异常啊,实际上我们知道这是一个type error,但是由于我没有指定,所以后。
08:17
是不是都被他捕获了,哎,所以我们如果为了我们这个更严谨一点,我们可以这么写啊,可以这么写,那这里边注意,实际上我这写一个except啊,我把上面先注掉,当然我们说了,我如果只写一个except,我只写一个except,它是是不是会捕获所有异常啊,所以其实我这如果只写一个except就相当于什么呢?就相当于我这写了一个exception啊,Exception你来看执行未知异常看着啊,我把这个变量这个打开走,你是不是也可以补货呀,再来一个,我把这个打开一保存走,你是不是也能补货呀?哎,它就可以补货所有异常了,所以我在这写一个exception跟不写实际上效果是什么呀,效果是一样的啊,效果是一样的,那这个exception是谁?我们来说一下exception,哎,叫做ex ex cep exception,它是所有异常的一个负类,所有异常类的负类啊。
09:17
所有异常类的负类,所以如果我们这个后跟的是我们这个exception。哎,它也会什么呢?哎,它也会捕获到我们这个所有的异常啊,它也会捕获到所有异常,跟不写实际上效果是一样的啊,也会捕获到所有异常啊,所以这是我们说来捕获指定的一个异常啊,捕获指定异常好,那接下来我们再看,那刚才我们说了。我们知道他异常是一个类了,是一个对象啊,那现在我们要看的是什么,我们是不是想看到那个异常对象啊,哎,那我们怎么来看到那个异常对象,那我们可以什么呢?诶可以在我们这个异常类,异常类后边跟着什么呢?诶跟着一个叫做一个S叉叉啊S叉叉,那此时我们这个叉叉就是我们这个异常对象什么意思?你这是不是有一个exception啊,看着啊,我在exception后边直接跟一个SE什么意思?那这就表示直接把我这个异常对象赋值SE这个变量,如果你不指定是没有的,写这么一个就是表示把异常对象赋值给E这个变量,那此时E表示的是谁?E表示的就是我这个异常对象,看着我直接打印一下E,直接打印一下E,未知异常,我这一执行你会发现是不是这么一个呀,诶不支持的一个操作一个什么呀,他他这个实际上就是我们这个异常信息,它并没有给我们显示出那个。
10:49
异常的什么呀,类型显示的是我们那个异常的什么呀,诶异常的信息,那这个时候我们这个异就是什么,就是那个异常对象,你也可以来看一下什么呀,哎,Type一个一看一下它类型,一保存一执行,是不是一个叫做type error,哎,Type error,这时候就看到它的一个一个类型了啊一个类型了,所以注意,如果你想看到那个异常对象,你可以给他来一个什么呀,SSE,这样你通过它就可以获取到一些信息,但是一般情况下,它其实没什么特别大的作用啊,没什么特别好的用,但是你要知道怎么去看,后边可以加一个什么呀,S啊S,所以这再写我们完整的写法就是什么呀,S,我们这来一个异常的一个名啊,异常名,当然这里面我们来写完整,在我们这写一个什么呀,Except的子句可以写多个啊,可以写多个啊,可以写多个,好,那接下来我们再来说这个其实还不完整啊,还不完整,我把这些注释啊都打开。
11:48
我看看从哪打啊,从这我把这些注释全都打开啊,那现在我是不是捕获了这么多异常啊,你每一个后边都可以跟S啊,每一个后边都可以跟,我就先不跟了,那除了try except,还有我们那个else,实际上在我们TRY后边还可以跟一个叫什么呢?叫做一个final fily叫做一个finally子句finally什么意思,叫做一个最终的意思啊,那这个东西我们来说一下finally子句它的什么呀?哎,它无论哎是否出现异常,哎该子距哎都会执行啊,都会执行,那我们这来看效果啊,看效果现在呢,我先呀。
12:34
我这来一个十除以二,十除以二,这时候是不是没有异常啊,没有异常啊,我们来看看finally走一个。翻译动力是不是执行了,哎,无论出是否出现异常,该子距都会执行,来再看我改成除以零,这时候是不是有异常了,哎,有异常,有异常,我们这一执行走一个出现异常了,它是不是也会执行啊,诶也会执行,所以这个是我们这个final列子句,那这儿我们如果再补全的话,我们这儿还可以再加一个什么呀?诶finally也是一个代码块,诶我们说了finally最终啊,该代码块总会执行啊,总会执行,那这个东西什么意思?在这里边我们可以放一些什么,放一些必须执行代码,也就是说无论你这个成功预付我都要执行的代码,我可以放到哪,可以放到final里啊,可以放到final里,那这个就是我们说的一个TRY语句的一个完整写法,先把语法记住了,后边我们马上就要去用到我们这个异常处理,先把语法给它记住了啊,这个就是我们这个串语句啊,串语句那这里边注意了,我们来说一下这个语句这么多结构是吧?哎,这么多结构,那我们来说一下。
13:42
快是必须的,TRY是必须的,也就是说如果你写TRY语句,TRY必须得有,这废话是吧,你写if语句没有if叫什么if语句对吧?TRY语句是必须的,然后这个else语句有没有都行,有没有都行,你可以不写,你可以写啊,有没有都行,但只能有一个啊,你else你不能写好多是吧,只能有一个,然后再来说什么呢?Except。
14:07
Except和什么呢?和finally,哎,至少有一个啊,至少有一个,也就说你只写try except OK,你只写try finally也OK,但是你光写个TRY那是不行的,Except和finally至少得有一个啊,至少得有一个,这个是我们说它的一个一个语句的一个语法啊,语句一个语法,好,那这个就是我们异常处理的一个什么呀,哎,完整结构,那你要知道我们所有的异常都是exception的一个什么呀,实例啊,包括我们这个zero,包括index,包括name,他们都是exception的一个子类啊,是EXCEPTION1个子类啊,完整的代码是这样的啊,我们的异常对象,好,我们这里还是停一下。
我来说两句