千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:郑州千锋IT培训  >  技术干货  >  python五大异常处理机制

python五大异常处理机制

来源:千锋教育
发布人:xqq
时间: 2023-11-11 22:02:33

  我们明白了什么是异常后,那么发现异常后怎么处理,便是我们接下来要解决的问题。这里将处理异常的方式总结为五种。

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/

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

学习python要注意的方法事项

2023-11-11

学习python的三个阶段

2023-11-11

Python编程语言的优缺点

2023-11-11

最新文章NEW

Python在编程语言中的优势

2023-11-11

Python网络爬虫教程

2023-11-11

用Python编写代码时有哪些有用的技巧?

2023-11-11

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>