python异常处理学习

上传人:我*** 文档编号:135970435 上传时间:2020-06-21 格式:DOC 页数:11 大小:354.50KB
返回 下载 相关 举报
python异常处理学习_第1页
第1页 / 共11页
python异常处理学习_第2页
第2页 / 共11页
python异常处理学习_第3页
第3页 / 共11页
python异常处理学习_第4页
第4页 / 共11页
python异常处理学习_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《python异常处理学习》由会员分享,可在线阅读,更多相关《python异常处理学习(11页珍藏版)》请在金锄头文库上搜索。

1、python异常处理(基础) python shell open(abc.txt,r)Traceback (most recent call last): File , line 1, in IOError: Errno 2 No such file or directory: abc.txt打开一个不存在的文件abc.txt 文件,当系统找不到abc.txt 文件时,就会抛出给我们一个IOError类型的错误,No such file or directory:abc.txt (没有abc.txt这样的文件或目录) Try.except. 假如,我们已经知道这种类型的错误,那么就可以通过一个

2、异常扑捉来扑捉这个错误。我们可以通过try.except 来接收这个错误。打开文件写入:try: open(abc.txt,r)except IOError: pass 再来运行程序就会看不到任何错误,因为我们用except 接收了这个IOError错误。pass 表示实现了相应的实现,但什么也不做。假如我不是打开一个文件,而是输出一个没有定义的变量呢? try: print aaexcept IOError: pass 显然,在上面的代码中我并没有对aa 赋值,运行结果:Traceback (most recent call last): File /home/fnngj/py_se/try

3、y.py, line 3, in print aaNameError: name aa is not defined我们已经用except 接收错误了,为什么错误还是还是抛出来了。如果你细心会发现这一次的错误类型是NameError ,而我接收类型是IOError ,所以要想接收这个print的错误,那么需要修改接收错误的类型为NameError虽然,我知道print 语句是可能会抛一个NameError 类型的错误,虽然接收了这个类型错误,但我不知道具体的错误提示信息是什么。那么,我能不能把错误信息打印出来呢?当然可以:try: print aaexcept NameError, msg:

4、print msg我们在接收错误类型的后面定义一个变量msg用于接收具体错误信息, 然后将msg接收的错误信息打印。再来运行程序:name aa is not defined现在只打印了一行具体错误信息。 异常的抛出机制:1、如果在运行时发生异常,解释器会查找相应的处理语句(称为handler).2、要是在当前函数里没有找到的话,它会将异常传递给上层的调用函数,看看那里能不能处理。3、如果在最外层(全局“main”)还是没有找到的话,解释器就会退出,同时打印出traceback以便让用户找到错误产生的原因。 注意:虽然大多数错误会导致异常,但一个异常不一定代表错误,有时候它们只是一个警告,有时

5、候它们可能是一个终止信号,比如退出循环等。 try.finally. try.finally.子句用来表达这样的情况:我们不管线捕捉到的是什么错误,无论错误是不是发生,这些代码“必须”运行,比如文件关闭,释放锁,把数据库连接返还给连接池等。 创建文件poem.txttryf.py复制代码import timetry: f = file(poem.txt) while True: # our usual file-reading idiom line = f.readline() if len(line) = 0: break time.sleep(2) print line,finally:

6、f.close() print Cleaning up.closed the file复制代码运行程序(在windows命令提示符或linux终端下运行):复制代码.$ python tryf.py abcefgCCleaning up.closed the fileTraceback (most recent call last): File tryy.py, line 18, in time.sleep(2)KeyboardInterrupt复制代码程序读poem.txt文件中每一行数据打印,但是我有意在每打印一行之前用time.sleep方法暂停2秒钟。这样做的原因是让程序运行得慢一些。

7、在程序运行的时候,按Ctrl-c中断/取消程序。我们可以观察到KeyboardInterrupt异常被触发,程序退出。但是在程序退出之前,finally从句仍然被执行,把文件关闭。 到目前为止,我们只讨论了如何捕捉异常,那么如何抛出异常呢? Raise抛出异常 使用raise来抛出一个异常:tryr.py#coding=utf-8filename = raw_input(please input file name:)if filename=hello: raise NameError(input file name error !)程序要求用户输入一个文件名,如果用户输入的文件名是hello

8、 ,那么抛出一个NameError的异常,用户输入hello 和NameError异常之间没有任何必然联系,我只是人为的通过raise来这样定义,我当然也可以定义称TypeError ,但我定义的异常类型必须是python提供的。 附录:常见的python异常类型从几年前开始学习编程直到现在,一直对程序中的异常处理怀有恐惧和排斥心理。之所以这样,是因为不了解。这次攻python,首先把自己最畏惧和最不熟悉的几块内容列出来,里面就有异常处理这一项。Dive into Python并没有专门介绍异常处理,只是例子中用到的时候略微说明了一下。今天下载Learn Python,直接进异常处理这块。这一

9、部分有四章,第一章讲解异常处理的一般使用方法,后面的章节深入地讨论其机制。我目前只看了第一章,先学会用,以后有必要的时候再扩展阅读。python主要支持五种异常机制,一一列举。默认的异常处理器复制代码 代码如下:s = Hello girl!print s100print continue如果我们没有对异常进行任何预防,那么在程序执行的过程中发生异常,就会中断程序,调用python默认的异常处理器,并在终端输出异常信息。这种情况下,第3行代码不会执行。tryexcept复制代码 代码如下:s = Hello girl!try: print s100except IndexError: prin

10、t error.print continue程序执行到第2句时发现try语句,进入try语句块执行,发生异常,回到try语句层,寻找后面是否有except语句。找到except语句后,会调用这个自定义的异常处理器。except将异常处理完毕后,程序继续往下执行。这种情况下,最后两个print语句都会执行。except后面也可以为空,表示捕获任何类型的异常。tryfinally复制代码 代码如下:s = Hello girl!try: print s100finally: print error.print continuefinally语句表示,无论异常发生与否,finally中的语句都要执行

11、。但是,由于没有except处理器,finally执行完毕后程序便中断。这种情况下,倒第2个print会执行,到第1个不会执行。如果try语句中没有异常,三个print都会执行。assert复制代码 代码如下:assert False,error.print continue这个语句,先判断assert后面紧跟的语句是True还是False,如果是True则继续执行print,如果是False则中断程序,调用默认的异常处理器,同时输出assert语句逗号后面的提示信息。本例情况下,程序中断,提示error,后面的print不执行。withas复制代码 代码如下:with open(nothin

12、g.txt,r) as f: f.read() print 2/0print continue我们平时在使用类似文件的流对象时,使用完毕后要调用close方法关闭,很麻烦。这里withas语句提供了一个非常方便的替代方法:open打开文件后将返回的文件流对象赋值给f,然后在with语句块中使用。with语句块完毕之后,会隐藏地自动关闭文件。如果with语句或语句块中发生异常,会调用默认的异常处理器处理,但文件还是会正常关闭。这种情况下,会抛出异常,最后的print不执行。书中介绍的很详细,除了上面我提到的之外,还有很多有用的附加信息,比如try.except.finally.else可以连用,

13、比如自定义异常类。这里不再列出,详情可以参考这本书中的介绍。python异常如何全面捕获标签: pythonexceptionimportfilec2012-04-04 13:38 19728人阅读 评论(1) 收藏 举报分类:Python(11)版权声明:本文为博主原创文章,未经博主允许不得转载。 如果你在写程序时遇到异常后想进行如下处理的话请参考我下面写的对异常处理的方法:假设有下面的一段程序:try: 语句1 语句2 . 语句Nexcept .: print . 但是你并不知道“语句1至语句N”在执行会出什么样的异常,但你还要做异常处理,且想把出现的异常打印出来,并不停止程序的运行,所以在“except .”这句应怎样来写呢?至少3个方法:方法一:捕获所有异常python view plaincopyprint? try: a=b b=c except Exception,ex: print Exception,:,ex 方法二:采用traceback模块查看异常python view plaincopyprint? import traceback try: a=b b=c

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 事务文书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号