异常:程序运行过程中由外部问题(硬件错误,输入错误)引起的异常事件。
语法:
try:
<语句>
except <名字>:#异常1名字
<语句> #发生异常后执行的语句
else:
<语句> #没有发生异常时执行的语句
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
示例:
打开一个不存在的文件,会报fileNotFoundError
用try语句捕获这个异常,
else语句是在没有异常的情况下执行的
拓展:
FileNotFoundError本质是一个异常类。
所有的异常,本质都是一个类。
异常类的树形表如下:
解读一下就是,FileNotFoundError的父类是OSError,OSError的父类是Exception类(大多数异常类的父类都是Exception),而终极boss是BaseException类(再往上就是Object类了)
明白这一点的意义有两个:
第一:当你想捕获一个异常,又不确定会遇到什么异常的时候,可以直接except Exception,因为按照类的继承原则,这条语句可以接收所有以它为父类的异常。
第二:你可以自己写一个异常类了。
定制异常了解一下~
定义一个类,继承Exception,它就成了异常类。
调用过程给了一个简单的示范,当文件不存在时,抛出TestException异常,然后在下面捕获,进行相应操作就可以。
#每日鸡汤:任何语言都只是一个工具,一个过程,最后指引你的是一种博大的文化#