Python入门精华-异常处理及其中的finally关键字的理解(超详细)

Python026

Python入门精华-异常处理及其中的finally关键字的理解(超详细),第1张

在python中会遇到两种错误,一种,是==语法错误==,这种错误不能被解释器容忍,必须更改为正确语法后程序才能运行;而另外一种,是在==程序运行过程中出现的错误==,诸如==NameError==,==TypeError==等此类错误,有错误名称和行号以及报错内容的错误,称之为==异常==。

名词解释:

[]:方括号内的内容不必一定出现

try:异常捕获块,有且仅有一个

except:异常处理块,可以有多个,且每个可以同时处理多种异常;不必一定存在

else:在未捕获到异常时,进入else;else可可选的,不必一定存在

finaly:不论try有没有捕获到异常都会进入的块,这里很多同学没有深刻体会到它的用途,只是单纯认为,此关键字不是必须的,没有那么重要,这个是讨论的一点,帮助各位童鞋理解加深印象。

as:为各种异常进行一个起别名额功能。

1、首先执行try中的代码块(error_statement),如果代码执行过程中出现异常,python会立刻生成一个对应的异常对象,并且将该异常上报解释器,由解释器获得异常的过程,称之为==异常捕获==。

2、如果==捕获到异常==,会立刻进入异常处理流程(==此时在try中异常出现以后的代码不会再运行==),即except关键字引导的块,根据关键字后边的ExceptionName来==自上而下由左及右==地逐个检查是否有对应的异常名称,如果有则进入对应的except模块,执行==其中的do_Excepttion_statement代码块==;如果没有检测到匹配的异常名称则==不会进入任何except块==,代码会继续向下运行。

3、else流程:在try中未检测到任何异常才会进入else,童鞋们可能会有疑问?是没有检测到异常,还是except没有包含该异常?注意~~这是两个概念,前者是没有异常,后者是有异常但是没有进行except处理。答案是,没有检测到任何异常(代码完全OK)才会进入else。示例如下:

4、except流程:

此处主要强调在最上边例子中的except[(ExceptionName1,ExceptionName2 ...) [as ...]]:的理解,‘[ ]’上边提到过,是代表可以没有;那么,童鞋写了如下代码,看看两种代码的结果是否相同呢?

首先,需要搞清楚,代码二是有语法错误的,这个必须得改正,问题在于else不能和try搭配,只能和except;第二点,这个是重点,只写except和什么都不写之间有没有区别?答案是肯定的,什么都不写代表不进行处理,而只写 except :’ 相当于 ==‘except Exception:’,这种写法意思是说万能异常处理,即Exception这种异常是所有异常的统称,所以如上的代码一是势必会打印‘name is error’这句话。

5、finally流程(重点) :童鞋们往往在有些时候比较难理解finally的存在的意义,但是对于这样的流程,大家却都知道无论try是否捕获到异常,都会进入finally流程’;那么接下来,我们细细品一品这个sao气外漏的fianlly究竟为何如此之sao。

5.1 fianlly: 其实这玩意有个冠冕堂皇的功能:垃圾处理机制,说白了,如果你打开了一些物理文件,最终,是需要finally来进行关闭的(有同学就说了,那不写在finally里边不行吗,也可以。)

5.2究竟如何理解?示例如下:

5.3 总结:

当 try 块中代码发生异常,导致程序崩溃时,在崩溃前 Python 解释器也会执行 finally 块中的代码

说明

1、程序可以通过创建一个新的异常类来命名它们自己的异常。异常应该是典型的继承自Exception类,直接或间接的方式。

2、异常python有一个大基类,继承了Exception。因此,我们的定制类也必须继承Exception。

实例

知识点扩展:

自定义异常类型

捕捉用户手动抛出的异常

以上就是python用户自定义异常的实例讲解的详细内容。