python中的五种异常处理机制介绍

作者:junjie 时间:2022-05-05 13:02:01 

从几年前开始学习编程直到现在,一直对程序中的异常处理怀有恐惧和排斥心理。之所以这样,是因为不了解。这次攻python,首先把自己最畏惧和最不熟悉的几块内容列出来,里面就有「异常处理」这一项。

《Dive into Python》并没有专门介绍异常处理,只是例子中用到的时候略微说明了一下。今天下载《Learn Python》,直接进异常处理这块。这一部分有四章,第一章讲解异常处理的一般使用方法,后面的章节深入地讨论其机制。我目前只看了第一章,先学会用,以后有必要的时候再扩展阅读。

python主要支持五种异常机制,一一列举。

默认的异常处理器


s = 'Hello girl!'
print s[100]
print 'continue'

如果我们没有对异常进行任何预防,那么在程序执行的过程中发生异常,就会中断程序,调用python默认的异常处理器,并在终端输出异常信息。这种情况下,第3行代码不会执行。

try…except


s = 'Hello girl!'
try:
 print s[100]
except IndexError:
 print 'error...'
print 'continue'

程序执行到第2句时发现try语句,进入try语句块执行,发生异常,回到try语句层,寻找后面是否有except语句。找到except语句后,会调用这个自定义的异常处理器。except将异常处理完毕后,程序继续往下执行。这种情况下,最后两个print语句都会执行。

except后面也可以为空,表示捕获任何类型的异常。

try…finally


s = 'Hello girl!'
try:
 print s[100]
finally:
 print 'error...'
print 'continue'

finally语句表示,无论异常发生与否,finally中的语句都要执行。但是,由于没有except处理器,finally执行完毕后程序便中断。这种情况下,倒第2个print会执行,到第1个不会执行。如果try语句中没有异常,三个print都会执行。

assert


assert False,'error...'
print 'continue'

这个语句,先判断assert后面紧跟的语句是True还是False,如果是True则继续执行print,如果是False则中断程序,调用默认的异常处理器,同时输出assert语句逗号后面的提示信息。本例情况下,程序中断,提示error,后面的print不执行。

with…as


with open('nothing.txt','r') as f:
 f.read()
 print 2/0
print 'continue'

我们平时在使用类似文件的流对象时,使用完毕后要调用close方法关闭,很麻烦。这里with…as语句提供了一个非常方便的替代方法:open打开文件后将返回的文件流对象赋值给f,然后在with语句块中使用。with语句块完毕之后,会隐藏地自动关闭文件。

如果with语句或语句块中发生异常,会调用默认的异常处理器处理,但文件还是会正常关闭。

这种情况下,会抛出异常,最后的print不执行。

书中介绍的很详细,除了上面我提到的之外,还有很多有用的附加信息,比如try..except..finally..else可以连用,比如自定义异常类。这里不再列出,详情可以参考这本书中的介绍。

标签:python,异常处理
0
投稿

猜你喜欢

  • 人工智能学习Pytorch教程Tensor基本操作示例详解

    2021-06-14 17:39:22
  • python中的map函数语法详解

    2021-04-29 22:07:00
  • 百度百科的图片轮播代码

    2009-05-06 12:58:00
  • MySQL性能优化之路---修改配置文件my.cnf

    2024-01-23 16:20:53
  • 利用Python实现Shp格式向GeoJSON的转换方法

    2021-01-30 09:14:49
  • 在Django的模板中使用认证数据的方法

    2022-09-08 00:29:45
  • Python人工智能构建简单聊天机器人示例详解

    2022-03-10 04:42:29
  • 如何实现全文检索?

    2010-05-24 18:24:00
  • CSS背景图片的运用优化HTTP连接数

    2008-09-04 21:38:00
  • python调用cmd命令行制作刷博器

    2023-07-26 15:18:35
  • Web 标准设计实践:Google 的首页

    2008-10-12 12:14:00
  • 加密SQL Anywhere 提升政府行业数据安全

    2008-12-03 15:25:00
  • ajax完美实现两个网页 分页功能的实例代码

    2023-11-14 12:57:27
  • 选项卡动态增删的效果(内嵌框架)

    2008-05-22 12:59:00
  • 简单的分页代码js实现

    2024-04-25 13:10:29
  • 基于Python pyecharts实现多种图例代码解析

    2021-11-10 05:20:17
  • Python使用稀疏矩阵节省内存实例

    2021-03-31 17:58:19
  • 详解如何模拟实现node中的Events模块(通俗易懂版)

    2024-05-05 09:20:55
  • python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例

    2022-12-24 23:49:30
  • 使用python如何提取JSON数据指定内容

    2022-08-06 23:48:41
  • asp之家 网络编程 m.aspxhome.com