python:10:错误与异常

来源:互联网 发布:关于网络语言暴力论文 编辑:程序博客网 时间:2024/06/11 07:05

第一章:python

第十节:错误与异常,try语句

1,try-except语句

try-except语句可对一段代码进行异常监控,并提供处理异常的机制。
>>> try:
... ····try_suite #监控这里的异常
... except Exception [, reason]: #监测异常类型
... ····except_suite #异常处理代码
实例:
>>> try:
... ····f=open('blah')
... except IOError, e:
... ····print 'could not open file:', e
could not open file: [Errno 2] No such file or directory: 'blah'
“could not open file: “是异常处理后输出的代码
IOError是异常的类型
[Errno 2] No such file or directory 是异常信息

2,异常的捕获方法

except语句内加入正确的异常类型,才能够正常捕获异常信息;
例如:
except IOError:
只能捕获IOError(输入输出错误)这种异常信息,不能捕获其他类型的异常信息;
当然,except语句也能够捕获多个异常类型;
例如:
except (ValueError, TypeError):
同时except语句也可以捕获所有异常信息;
例如:
except Exception, e:
···· print e

文件类型迭代器的结束用法
>>> f=open('name.py')
>>> While True:
... ····try:
... ········f.next()
... ····except StopIteration:
... ········print 'file read over'
... ········break
'#!/usr/bin/env python\n'
"print 'yes'\n"
file read over

3,try当中的else子句

在try范围中,没有异常被检测到时执行else子句
例子:
>>> try:
... ····a=open('yes.py')
... except IOError:
... ····print 'file not exist'
... else:
... ····a.close()
file not exist
>>> a
NameError: name 'a' is not defined
当except语句检测到异常则仅仅执行except语句,不执行else语句;同时a=open(‘yes.py’)也因为异常而没有实现,所以输入a,会出现NameError这个异常

>>> try:
... ····f=open('C:\Users\Administrator\Desktop\\ex9.txt')
... except IOError:
... ····print 'file not exist'
... else:
... ····f.close()
>>> f
<closed file 'C:\\Users\\Administrator\\Desktop\\ex9.txt', mode 'r' at 0x0000000002AC45D0>
except语句没有监测到异常,所以else子句正常执行,当输入f时显示的是closed file

4,try-finally语句

try-fially语句的常用方法
1,文件的打开读取,常用try-finally解决问题;
2,finally语句在无论异常是否发生,是否捕捉到异常,都会执行的一段代码;
3,try-finally语句和try-except语句区别在于其不是用来捕捉异常的,她常常用来维持一致行为而无论异常是否发生。我们得知无论try语句中是否有异常触发,finally代码段都会被执行。
4,当在try范围中产生一个异常时,(这里)会立即跳转到finally语句段。当finally中的所有代码都执行完毕后,会继续想上一层引发异常。利用插入的部分代码说明第4句的内容,例如:f=open(‘1.py’)如果1.py文件不存在则属于IOError,如果之前f=open(‘1.py’)出现了IOError则,finally语句中f.close()这里执行时属于NameError。
实例:
>>> try:
... ····try:
... ········f=open('a.txt')
... ········a=f.readlines()
... ····finally:
... ········f.close()
... except (IOError, NameError):
... ····print 'no such file'
no such file
如果open的文件不存在,会引发IOError,同时如果引发了IOError,在finally执行f.close()时,会引发NameError,所以except语句会捕获两个异常(IOError和NameError),所以打印出no such file。如果open的文件存在,则没有异常引发,finally语句也同样会执行,所以不会打印出no such file。

5,raise语句

有raise可引发一种异常
>>> a=1
>>> if a==1:
... ····print 'yes'
yes
>>> if a==1:
... ····raise NameError('a is 1 defined!!!')
Traceback (most recent call last):
··File "<pyshell#58>", line 2, in <module>
····raise NameError('a is 1 defined!!!')
NameError: a is 1 defined!!!
raise语句在确定要引发异常时,要先指定引发的异常的类型,当然这个异常类型一定是python系统当中所存在的异常类型,不能够自行定义除系统外异常类型的其他类型,否则会报错;括号内是raise引发的异常的说明。
raise NameError(‘a is 1 defined!!!’)

原创粉丝点击