python五大异常处理机制
我们明白了什么是异常后,那么发现异常后怎么处理,便是我们接下来要解决的问题。这里将处理异常的方式总结为五种。
1、默认异常处理机制
“默认”则说明是解释器默认做出的行为,如果解释器发现异常,并且我们没有对异常进行任何预防,那么程序在执行过程中就会中断程序,调用python默认的异常处理器,并在终端输出异常信息。刚才举过的例子:int(“m”),便是解释器因为发现参数传入异常,这种异常解释器“无能为力”,所以它最后中断了程序,并将错误信息打印输出,告诉码农朋友们:你的程序有bug!!!
2、try…except…处理机制
我们把可能发生错误的语句放在try语句里,用except来处理异常。每一个try,都必须至少有一个或者多个except。举一个最简单的例子如下,在try访问number的第500个元素,很明显数组越界访问不了,这时候解释器会发出异常信号:IndexError,接着寻找后面是否有对应的异常捕获语句except,如果有则执行对应的except语句,待except语句执行完毕后,程序将继续往下执行。如果没有对应的except语句,即用户没有处理对应的异常,这时解释器会直接中断程序并将错误信息打印输出。
number='hello'try:print(number[500])#数组越界访问exceptIndexError:print("下标越界啦!")exceptNameError:print("未声明对象!")print("继续运行...")
输出结果如下,因为解释器发出异常信号是IndexError,所以执行下标越界语句。
下标越界啦!
继续运行...
为了解锁更多用法,我们再将例子改一下,我们依然在try访问number的第500个元素,造成访问越界错误,这里的except用了as关键字可以获得异常对象,这样子便可获得错误的属性值来输出信息。
number='hello'try:print(number[500])#数组越界访问exceptIndexErrorase:print(e)exceptExceptionase:#万能异常
print(e)except:#默认处理所有异常
print("所有异常都可处理")print("继续运行...")
输出结果如下所示,会输出系统自带的提示错误:stringindexoutofrange,相对于解释器因为异常自己抛出来的一堆红色刺眼的字体,这种看起来舒服多了(能够“运筹帷幄”的异常才是好异常嘛哈哈哈)。另外这里用到“万能异常”Exception,基本所有没处理的异常都可以在此执行。最后一个except表示,如果没有指定异常,则默认处理所有的异常。
stringindexoutofrange继续运行...
3、try…except…finally…处理机制
finally语句块表示,无论异常发生与否,finally中的语句都要执行完毕。也就是可以很霸气的说,无论产生的异常是被except捕获到处理了,还是没被捕获到解释器将错误输出来了,都统统要执行这个finally。还是原来简单的例子加上finally语句块如下,代码如下:
number='hello'try:print(number[500])#数组越界访问,抛出IndexError异常exceptIndexError:print("下标越界啦!")finally:print("finally!")print("继续运行...")#运行
结果如下,数据越界访问异常被捕获到后,先执行except语句块,完毕后接着执行了finally语句块。因为异常被执行,所以后面代码继续运行。
下标越界啦!finally!
继续运行...
对try语句块进行修改,打印abc变量值,因为abc变量没定义,所以会出现不会被捕获的NameError异常信号,代码如下所示:
number='hello'try:print(abc)#变量未被定义,抛出NameError异常exceptIndexError:print("下标越界啦!")finally:print("finally!")print("继续运行...")#不运行
结果如下,因为NameError异常信号没法被处理,所以解释器将程序中断,并将错误信息输出,但这过程中依然会执行finally语句块的内容。因为程序被迫中断了,所以后面代码不运行。
finally!#异常没被捕获,也执行了finallyTraceback(mostrecentcalllast):
File"E:/Test_code/test.py",line3,in
print("abc")NameError:name'abc'isnotdefined
理解到这里,相信:try…finally…这种机制应该也不难理解了,因为省略了except捕获异常机制,所以异常不可能被处理,解释器会将程序中断,并将错误信息输出,但finally语句块的内容依然会被执行。例子代码如下:
number='hello'try:print(abc)#变量未被定义,抛出NameError异常finally:print("finally!")print("继续运行...")
运行结果:
finally!#异常没被捕获,也执行了finallyTraceback(mostrecentcalllast):
File"E:/Test_code/test.py",line3,in
print("abc")NameError:name'abc'isnotdefined
4、assert断言处理机制
assert语句先判断assert后面紧跟的语句是True还是False,如果是True则继续往下执行语句,如果是False则中断程序,将错误信息输出。
assert1==1#为True正常运行assert1==2#为False,终止程序,错误信息输出
5、with…as处理机制
with…as一般常用在文件处理上,我们平时在使用类似文件的流对象时,使用完毕后要调用close方法关闭,很麻烦,这里with…as语句提供了一个非常方便且人性的替代方法,即使突发情况也能正常关闭文件。举个例子代码如下,open打开文件后将返回的文件流对象赋值给fd,然后在with语句块中使用。
withopen('e:/test.txt','r')asfd:
fd.read()
print(abc)#变量未被定义,程序终止,错误信息输出print("继续运行...")
正常情况下,这里的with语句块完毕之后,会自动关闭文件。但如果with语句执行中发生异常,如代码中的变量未定义异常,则会采用默认异常处理机制,程序终止,错误信息输出,后面代码不被运行,文件也会正常关闭。
以上内容为大家介绍了python五大异常处理机制,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。http://www.mobiletrain.org/
相关推荐HOT
更多>>Python的缩进规则
和其它程序设计语言(如Java、C语言)采用大括号“{}”分隔代码块不同,Python采用代码缩进和冒号(:)来区分代码块之间的层次。在Python中,对于类...详情>>
2023-11-11 23:15:31python五大异常处理机制
我们明白了什么是异常后,那么发现异常后怎么处理,便是我们接下来要解决的问题。这里将处理异常的方式总结为五种。1、默认异常处理机制“...详情>>
2023-11-11 22:02:33python中any函数如何使用?
python中any函数如何使用?在python中,如果想要判断一个tuple或者list是否全部为空、0、False,可以使用any函数。使用any函数,当全为空、0、Fa...详情>>
2023-11-11 15:18:19Python的信号库Blinker有何用法?
python的信号库Blinker有何用法?本文教程操作环境:windows7系统、Python3.9.1,DELLG3电脑。作为一个信号库,使用时候是支持一对一以及一对多...详情>>
2023-11-11 14:18:20