00:00
好,那刚刚呢,我们是知道这个异常的处理方式啊,那接下来我们来再说下一个问题,那刚才我们这儿一直都是在处理异常,哎,那我们就想我们能不能我们向别人去抛异常呢?哎,那这里边我们要说的是什么呢?哎,我们叫做一个抛出异常啊抛出异常那我们这里边来直接来说了,我们可以什么呢?诶我们可以使用,我们叫做RA,叫做一个rise,诶rise语句,诶来干嘛呢?诶来抛出异常啊,来抛出异常,那我们来说一下我们这个rise语句,Rise语句后,诶需要跟一个这个异常类或什么呢?哎,或异常的一个实例啊,异常的一个实例,我们先来看这个例子吧,直接写一个啊,直接写一个,这直接保存我们来代码,我们叫做一个0303,我们叫做一个抛出。
01:00
异常点一个PY,那这里边我们来说一下啊,那我们直接定义一个定义一个方法吧,定一个函数啊,直接定义一个,我们就一个I的啊求和的啊这么一个里边两个参数,一个是A,一个是B啊那这个东西非常简单,直接就是re return一个,这个什么呢?A加B啊return一个加B,那这个就就很简单了,是吧,直接来打印吧,诶直接一个诶I的,我们这儿来一个123逗号,一个456,这一保存,我们这一执行是579就OK了,诶就OK了,那就这么一个东西啊,就这么一个东西,那这样吧,我把它改一种写法啊,为了待会我们方便写一下,我直接来一个R等于一个A加B,然后呢,我这返回什么呢?返回二,好,那这看完了,那接着我们来说啊,接着我们来说,那假设什么呢?假设我们在这里,我们不希望A或者B是负数,就是我这里只做。
02:00
哎,零以上的大于零的数的这个这个这个加法如果是负数,我在这儿我就不想给你做,哎,或者说如果什么呢。哎,如果A和B中有负数,有负数我们就什么呢?哎,我们就向外部向我们这个调用处干嘛呢?哎,抛出异常啊,像我们这个调用处抛出异常,那我们要怎么做,那这里边我们先做一个判断,我们先来判断A和B是不是负数,If a干嘛呢?诶小于零,然后呢,或者谁呢,B小于零,也就说他们两个之间有一个小于零吧,诶有一个小于零,然后呢,接下来如果小于零怎么办?如果小于零在这儿我直接来一个什么呀?诶rise直接后边我们来一个这个exception啊exception exception直接写它就行了,那这样它就会向外边抛出一个什么呀,哎,抛出一个这个,哎这个exception的这个异常,那我们来说一下rise再写一遍是吧,Rise用于什么呢?诶,用于向我们的这个外部抛出异常,它后边可以什么呀,哎,可。
03:10
可以跟一个这个异常的一个类或什么呢?或异常类的一个实例,现在我们这种情况是不是跟着一个类,哎跟着一个类,那好,那现在这种情况,如果A和B有一个是负数,它就开有异常了啊有错了,我们这一保存,这一执行,现在没错对吧?没错,好,我把A改成一个负123,这时候一保存再一执行看到什么了,诶这时候就抛出了一个这个异常啊,你看根是是在什么呀,在第五行rise了一个exception啊传到什么,传到第九行,也就说我在这儿抛出了一个异常,然后在第九行,这是不是传到第九行这儿了,哎,那在这里边我们就可以通过这个rest来抛出异常,但是你会发现我们这个异常这它没有信息,它不像我们之前那个异常,异常后边是不是跟着一个信息啊,这没有任何信息,那怎么办?为什么没有信息?因为现在我们传的是一个类,传的是一个类,也就是说实力是由我们的这个解析器自己去创建的。所以。
04:10
如果你要想设置信息的话,哎,你就需要在这什么呀,在这加括二,你要创建实例了,在这里边你可以传递一个异常的消息,比如说我们写一个,诶叫什么呢?诶A2个参数中,哎不能有负数啊,不能有负数,我们这一保存,咱们来一执行,走一个两个参数中不能有负数,是不是就会会有这个异常信息了,哎,所以注意这里我们也可以手动的向外部去抛出异常,用的是我们这个什么呀?哎,用的是我们这个rest语句啊,用的是我们rise语句,诶那这时候可能很多同学就有疑问了,诶老师,我这个异常我躲还躲不及呢,我不希望出现异常,那我为什么还要向外部抛出异常呢?我们为什么要抛异常,哎,我们要为什么要抛异常,那我们抛异常的目的是什么?哎,我们抛出异常的一个目的是什么?诶是还是一句话,是告诉我们这个调用者,诶这里什么呀?诶这里调用时出现问题,诶调用时出现问题希望什么呀?哎希望你自己处理一下啊就是告诉外部这块有问题,你需要自己去处理一下,诶那同学就会说了,那我为什么不在我这儿,我就自己就处理呢?你有负数,我这改一下不就行了吗?哎,咱们这种需求我在这里的确能处理,对吧?你是负数,我就呃用一个别的方式给你改一下不就完了吗?对吧?可以去处理,或者弹出一个提示怎么着都行,可以去处理,但是是不是所有情况下我们都需要处理。
05:47
我们都能处理,哎不一定啊,比如说咱们说一个功能,比如说什么呢?比如说我做一个结账的功能,结账check out对吧,我去结账,我去网上商城买东西,买完东西我要提交订单,我要去结账,那这时候结账的时候出问题了,出什么问题啊,问题可能性很多,库存不够,用户这个付款失败,是不是都可能导致我们这个出问题啊,诶导致这个结账这个函数出问题,那这个时候注意了,我问你了,假如说库存不够了,假如说用户这个钱诶没有付,那这个时候出问题了,我这个能不能在我这个结账的函数内部来处理。
06:24
诶,很明显这个时候我在内部处理是不合适的,为什么不合适?因为我只是负责给他结账的,至于他结账成功怎么办,失败怎么办,这个应不应该由我这个函数来决定,哎,不应该,同理,我这个函数就是用来算A和B的结果的,就算正数的加相加了一个结果,那负数我是不管的,所以你给我传了一个负数,怎么处理这个事儿,实际上不应该在我函数内部决定。懂这意思吗?它应该是什么,由调用者决定,我把这个消息告诉你,调用者怎么处理,你自己决定,我在函数内部不能去替你判断,我也不可能考虑到你所有的情况,懂这意思吧,所以这个时候我就要干嘛向外部去抛出异常啊,去抛出异常提醒你这里边可能会有问题,你自己需要干嘛,需要去处理一下,懂这意思吧,所以就是来通过异常的形式来提示调用者这块可能会有有问题啊,有问题那这时候可能就会说了。
07:31
我觉得异常这种方式太生硬了,太生硬了,我可以不用异常,我用直接我向这用了一个if对吧,我可以干嘛呀,这样如果你出现异常了,我这如果你有负数了,我直接给你特一个,那哎如果你结果正确,比如说我这是一个123456,这是没问题的,我这一执行是不是就算出来了,如果你这出现一个负数,我们这一保存走一个是不是就反问带呀,那通过这种情况是不是也可以啊,哎,也可以,所以注意了这块我们来说一下,我们可以什么呢?我们也可以通过我们这个if else来代替我们这个异常的一个处理,那就比如说我们这补货异常,补货这种除零异常,我能不能用if else处理也行,我就判断这个数是不是零呗,是零我就让你除,不是零我就不让你除,对吧,也可以用if else,包括在这抛异常的时候,我是不是也可以用if else,哎,也可以用E,那先说这块补货的时候,我能不能用if else。
08:31
可以用,但为什么不用,为什么?因为我们用if else if,它是不是只考虑某种情况啊,它不可能去适用于所有情况,所以即使你用if了,你也不能实现这种情况,捕获所有异常,对吧?所以如果你要用if这个语句会写的非常非常的麻烦啊,非常麻烦,所以处理异常的时候,我们肯定不会用if,能用也不用,那这儿我们是不是也等于在用if,但是我们这儿要不要用这种方式处理,诶不要,为什么,你直接给返回一个,那的确能体现出他确实有问题,但是这个时候这个问题。
09:05
他是不是强制让你去处理的,不是就说你返回值是一个,那你处不处理都行啊,你出处理都行,你不处理也行,你处理也行,这时候就没有强制性,你这个问题如果不严重,OK,返回,那就返回none了,通论种方式没问题,但是如果你这个问题严重,必须让他去处理呢?那这个时候注意你就必须得抛异常,因为你返回一个,那如果他处理还好,如果他没有处理,程序一直往下运行下去,那是不是就会出现一些很严重的问题,诶有可能出现一些严重的问题,所以这个时候这种方式比较死,哎,用我们这个抛异常的方式更加的灵活,让他干嘛呀,让他必须得处理,强制你必须得处理这个问题啊,所以我们经翅会采用什么呀?诶这种抛异常的形式,诶来提示我们这个调用者这块有问题啊,你需要去处理一下,好,那接下来我们来说,那这块其实也会有一个小问题,什么小问题呢?那现在我们这定义了一个exception对吧,这个1EXCEPTION是一。
10:06
个通用的,它并不能看出来这个异常的具体类,那有的时候我们希望什么呢?像我们这个系统内部的异常一样,如果是这个变量的错,我就来一个name error,如果是索引的错,我就来一个inex error,如果是什么错,我就是不是有一个对应的异常类啊,那这样我一看到类,我是不是知道什么异常了,诶那这块我们来说,我能不能去自定义异常,诶可以啊,可以我们这块来说一下,我们也可以什么呢?诶我们也可以,诶自定义什么呀,我们的这个异程类非常简单,只需要什么呢?诶只需要创建一个这个类继承什么呢?我们这个exception即可,诶只需要创建一个类继承它即可。所以比如说你想创一个自己的错误,比如说我这接来一个class,我就叫一个my error啊,MY那这里边注意它必须得继承我们这个exception,那至于它类里边写什么,什么都不用。
11:06
写啊,什么都不用写,你可以添加一些自己的方法,但是一般情况下什么都不用写,直接继承这个exception就OK了,那这个时候你要想抛一常,那这个时候就简单了,直接rise什么呀,哎,Rise这个my error1保存一执行,诶那这个时候就抛这个,哎,当然你也可以后边附加消息啊,这是我们这个自定义的一个什么呀,诶异常啊,定义的异常一执行,这时候是就能看见了啊,就能看见了啊,一般情况下就这么定义就OK以了,如果真的需要自定义,就这么定义,一般情况下也不是特别的需要啊,不是特别需要好,那这个就是我们说一个抛出异常啊,我们可以自主的向外部去抛出异常,也可以去自定义一个类,诶去一个自定义一个我们自己的一个错误信息啊,一个异常好,这里我们来停一下啊。
我来说两句