|
异常处理的目的是防止用户看到不友好的异常情况,避免程序异常退出
一.通过try...except...将异常截获,保证程序继续执行
1
2
3
4
5
6
| try:
open('test.txt','r')
1/0
except ZeroDivisionError,e:
print e
print 'done'
|
运行以上程序直接抛出异常如下,第2行之后的语句没有被执行,程序直接退出
>>>
Traceback (most recent call last):
File "D:\Python\code\test.py", line 2, in <module>
open('test.txt','r')
IOError: [Errno 2] No such file or directory: 'test.txt'
>>>
下面我们将try的两行语句互换位置再次运行
1
2
3
4
5
6
| try:
1/0
open('test.txt','r')
except ZeroDivisionError,e:
print e
print 'done'
|
>>>
integer division or modulo by zero
done
>>>
可以看出done被打印,异常情况被截获,保证了程序继续执行
二.finally子句:不管有无异常都执行,常用于文件关闭,释放数据库连接的操作
1
2
3
4
5
6
| try:
1/1
except ZeroDivisionError,e:
print e
finally:
print 'done'
|
>>>
done
>>>
程序没有异常依然打印出done
三.异常抛出raise子句:主动抛出异常给上一层,用于api错误提示处理,屏蔽底层异常等
1
2
3
4
5
6
7
8
9
| try:
1/0
except Exception,e:
fp=open('error.log','w')
fp.write(str(e)+'\n')
fp.flush()
fp.close()
print str(e)
raise Exception('test raise')
|
>>>
integer division or modulo by zero
Traceback (most recent call last):
File "D:\Python\code\test.py", line 9, in <module>
raise Exception('test raise')
Exception: test raise
>>>
将程序抛出的异常截获存入log文件,抛给用户一个友好的提示
|
|