异常
<1>异常简介
看如下示例:
运?结果:
案例剖析
<1>捕获异常try...except... 看如下示例:
?总结:
<2>获取异常的信息描述看如下示例:
想?想:
<3> except捕获多个异常#cod
ing=
utf-
8
try:
print('-----test--1---')
# 如果123.txt?件不存在,那么会产?IOError 异常
open('123.txt',
'r')
print('-----tes
t--2---')
# 如果num变量没有定义,那么会产?NameError 异常
print(num)
except (IOError,NameError),
errorMsg:
#如果想通过?次except捕获到多个异常可以??个元组的?式
# errorMsg?会保存捕获到
的错误信息
print(errorMsg)
注意:
如果想捕获所有的异常,可以省略 except 后?的变量
但是这种?法不建议?家使?,会隐藏?些开发者没有想到的异常情况
<4> try...finally...
try...finally...语句?来表达这样的情况:
不管线捕捉到的是什么错误,?论错误是不是发?,这些代码“必须”运 ?,?如?件关闭,释放锁,把数据库连接返还给连接池等 demo:
说明:
import time try :
f = file('test.txt') while True :
line = f.readline() if len(line) == 0:
break time.sleep(2) print(line)
finally : f.close()
test.txt ?件中每??数据打印,但是我有意在每打印??之前? time.sleep ?法暂停2秒钟。这样做的原因是让程序运?得慢?些。在程 序运?的时候,按Ctrl-c 中断/取消程序。
我们可以观察到KeyboardInterrupt 异常被触发,程序退出。但是在程序 退出之前,finally 从句仍然被执?,把?件关闭。
<4> else
咱们应该对 else 并不陌?,在if 中,它的作?是当条件不满?时执?的实 ?;同样在try...except...中也是如果,即如果没有捕获到异常,那么就执? else 中的事情
运?结果如下:
try :
num = 100 print num
except NameError, errorMsg: print('
产?错误了:%s'%errorMsg) else :
print('没有捕获到异常,真
?兴')
finally :