河南省焦作市武陟县
Python异常、模块与包
异常的概念
当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常",也就是我们常说的BUG
BUG单词的诞生
早期计算机采用大量继电器工作,马克二型计算机就是这样的。
1945年9月9日,下午三点,马克二型计算机无法正常工作了,技术人员试了很多办法,最后定位到第70号继电器出错。负责人哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用镊子将蛾子夹出来,用透明胶布贴到"事件记录本"中,并注明"第一个发现虫子的实例"。自此之后,引发软件失效的缺陷变被称为BUG。
异常演示
例如:以 r 方式打开一个不存在的文件
为什么要捕获异常
世界上没有完美的程序,任何程序在运行的过程中,都有可能出现:异常,也就是出现bug导致程序无法完美运行下去。
我们要做的,不是力求程序完美运行。
而是在力所能及的范围内,对可能出现的bug,进行提前准备、提前处理。
这种行为我们称之为异常处理(捕获异常)
当我们的程序遇到了BUG,那么接下来有两种情况:
整个程序因为一个BUG停止运行
对BUG进行提醒,整个程序继续运行
显然在之前的学习中,我们所有的程序遇到BUG就会出现 1 的这种情况,也就是整个程序接崩溃
但是在真实的工作中,我们肯定不能以为内一个小的BUG就让整个程序全部崩溃,也就是我们希望的是达到 2 的这种情况
那这里我们就需要使用到捕获异常
捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段。
捕获常规异常
基本语法:
try:
可能发生错误的代码
except:
如果出现异常执行的代码
尝试以 r 模式打开文件,如果文件不存在,打印不存在
捕获指定异常
注意:如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。
一般try下方只放一行尝试执行的代码
捕获多个异常
当捕获多个异常时,可以把要捕获的异常类型的名字,放到except后,并使用元祖的方式进行书写。
捕获异常并输出描述信息
捕获所有异常
异常else
else表示的是如果没有异常要执行的代码
异常的finally
finally表示的是无论是否异常都要执行的代码,例如关闭文件
异常的传递
异常是具有传递行的,当函数func01中发生异常,并且没有捕获处理这个异常的时候,异常会传递到函数func02,当func02也没有捕获处理这个异常的时候,main函数会捕获这个异常,这就是异常的传递性。
提示:当所有函数都没有捕获异常的时候,程序就会报错。
上图重main函数:利用异常具有传递性的特点,当我们想要保证程序不会因为异常崩溃的时候,就可以在main函数中设置异常捕获,由于无论在整个程序哪里发生异常,最终都会传递到main函数中,这样就可以确保所有的异常都会被捕获。