异常抛出机制:为程序开发人员提供一种在运行错误发现,进行恢复处理,然后继续执行的能力。
范例:
>>> try:
... f = open('unfile.py','r')
... except IOError, e:
... print False, str(e)
...
False [Errno 2] No such file or directory: 'unfile.py'#!/usr/bin/python
try: #try尝试执行代码
open('abc.log')
except IOError,msg: #except接受异常,注意异常的名称要相符,通过变量接受异常信息
pass #占位#执行代码时没有任何问题,但这个代码是打不开的。
*msg变量解释,只是接受错误的信息:
.... except IOError,msg: print msg 执行后代码后,打印相关错误 [Errno 2] No such file or directory: 'abc.log'
#如果直接执行:
open('abc.log')
#报错:
Traceback (most recent call last):
File "try.py", line 6, in <module>
open('abc.log')
IOError: [Errno 2] No such file or directory: 'abc.log'异常类型注意:异常类型,并不是直接使用except就可以捕获异常;
[root@zabbix 123]# cat try.py
#!/usr/bin/python
try:
open('abc.log')
except NameError,msg: #当修改异常类型为NameError
pass
[root@zabbix 123]# python try.py
Traceback (most recent call last):
File "try.py", line 3, in <module>
open('abc.log')
IOError: [Errno 2] No such file or directory: 'abc.log'#执行后IOError同样会报错,except并没有捕获NameError
#如果有多段代码
[root@zabbix 123]# cat try.py
#!/usr/bin/python
try:
open('test.log') #此处的test.log文件是存在的
print hello #此处的hello是一个变量,不是字符串
except IOError,msg:
pass
[root@zabbix 123]# python try.py
Traceback (most recent call last):
File "try.py", line 4, in <module>
print hello
NameError: name 'hello' is not defined #当执行到hello时,提示未命名;言外之意:当程序出现异常时,程序会终止,随后捕获异常,如果再次出现异常,也可以再次捕获
[root@zabbix 123]# cat try.py
#!/usr/bin/python
try:
open('test.log')
print hello
except IOError,msg:
pass
except NameError,msg:
pass
[root@zabbix 123]# python try.py#当再次执行时,异常被掩盖。#再次强调异常的捕获,是根据异常的名称的定义的!
异常处理:pass 只是掩盖了异常,并不是无任何其它操作,(例如定义一些异常处理的函数来解决问题)!
范例:
[root@zabbix 123]# cat try.py
#!/usr/bin/python
#coding:utf8
filename = raw_input("请输入要操作的文件:")
try:
open(filename)
print hellp
except IOError,msg:
print "指定的文件不存在,请重新输入"
except NameError,msg:
print "内部变量调用错误!"
[root@zabbix 123]# python try.py
请输入要操作的文件:test.log
内部变量调用错误!
[root@zabbix 123]# python try.py
请输入要操作的文件:a.log
指定的文件不存在,请重新输入
#处理可能出现问题的程序段,捕获问题进行相应的处理。抛出机制:
1、如果在运行时发生异常的话,解释器会查找相应的处理语句(称为handler)
2、要是在当前函数里没有找到的话,它会将异常传递给上层的调用函数,看看那里能不能处理。
3、如果在最外层(全局”main“)还是没有找到的话,解释器就会退出,同时打印出traceback以便让用户找出错误产生的原因。
#注意虽然大多数错误会导致异常,但一个异常不一定代表错误。有时候他们只是一个警告,有时候他们可能是一个终止信号,比如退出循环等。
finally字句:
Python提供try-finally子句,表达:不关心捕捉的错误,且错误是否发生,这些代码必须执行,比如文件的关闭,释放锁,把数据库链接返还给链接池等。
问题:
#!/usr/bin/python
#coding:utf8
filename = raw_input("请输入要操作的文件:")
try:
f = open(filename)
print hellp
except IOError,msg:
print "指定的文件不存在,请重新输入"
except NameError,msg:
print "内部变量调用错误!"
print "over"
f.close()
print "that's all"
[root@zabbix 123]# python try.py
请输入要操作的文件:123 #此处f对象是无
指定的文件不存在,请重新输入
over
Traceback (most recent call last):
File "try.py", line 12, in <module>
f.close() #执行时出现问题
NameError: name 'f' is not defined范例:
#!/usr/bin/python
#coding:utf8
filename = raw_input("请输入要操作的文件:")
try:
f = open(filename)
print hellp
except IOError,msg:
print "指定的文件不存在,请重新输入"
except NameError,msg:
print "内部变量调用错误!"
finally:
print "ok"
[root@zabbix 123]# python try.py
请输入要操作的文件:123
指定的文件不存在,请重新输入
ok
#注意finally子句执行raise抛出异常:
例子:
#!/usr/bin/python
#coding:utf8
filename = raw_input("请输入要操作的文件:")
try:
f = open(filename)
print hellp
except IOError,msg:
print "指定的文件不存在,请重新输入"
except NameError,msg:
print "内部变量调用错误!"
finally:
print "ok"
if filename == "hello":
raise TypeError("noting!!!")[root@zabbix 123]# python try.py
请输入要操作的文件:new.log
内部变量调用错误!
ok
[root@zabbix 123]# python try.py
请输入要操作的文件:hello
指定的文件不存在,请重新输入
ok
Traceback (most recent call last):
File "try.py", line 14, in <module>
raise TypeError("noting!!!")
TypeError: noting!!!
#此处抛出异常注意:异常的类型不可以随便指定,需python中可以识别、正常处理的异常。
如:
........
if filename == "hello":
raise OtherError("noting!!!")
执行后:
Traceback (most recent call last):
File "try.py", line 14, in <module>
raise OtherError("noting!!!")
NameError: name 'OtherError' is not defined常见的python异常:
![}9MKJK{_3][2_1`W9]A9@(A.jpg python 异常处理_python 异常处理](http://s2.51cto.com/wyfs02/M00/6E/3B/wKiom1V2rviCTu6-AAQU5p8hS-0629.jpg?x-oss-process=image/resize,m_fixed,w_1184)
















