python 捕获多个异常
实际开发中,捕获多个异常的方式,如下:
#coding=utf-8
try:
print('-----test--1---')
open('123.txt','r') # 如果123.txt文件不存在,那么会产生 IOError 异常
print('-----test--2---')
print(num)# 如果num变量没有定义,那么会产生 NameError 异常
except (IOError,NameError):
#如果想通过一次except捕获到多个异常可以用一个元组的方式
# errorMsg里会保存捕获到的错误信息
print(errorMsg)
注意:
当捕获多个异常时,可以把要捕获的异常的名字,放到except
后,并使用元组的方式仅进行存储.
获取异常的信息描述
try:
print(a)
except NameError as result
print(result)
捕获所有异常:
try:
print(a)
except Exception:
print('捕获所有异常')
else
详细用法
咱们应该对else
并不陌生,在if
中,它的作用是当条件不满足时执行的实行;同样在try
...except
...中也是如此,即如果没有捕获到异常,那么就执行else
中的事情.
try:
num = 100
print(num)
except NameError as errorMsg:
print('产生错误了:%s'%errorMsg)
else:
print('没有捕获到异常,真高兴')
finally
的使用场景:
在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。比如文件关闭,释放锁,把数据库连接返还给连接池等
demo:
import time
try:
f = open('test.txt')
try:
while True:
content = f.readline()
if len(content) == 0:
break
time.sleep(2)
print(content)
except:
#如果在读取文件的过程中,产生了异常,那么就会捕获到
#比如 按下了 ctrl+c
pass
finally:
f.close()
print('关闭文件')
except:
print("没有这个文件")
说明:
test.txt文件中每一行数据打印,但是我有意在每打印一行之前用time.sleep方法暂停2秒钟。这样做的原因是让程序运行得慢一些。在程序运行的时候,按
Ctrl+c
中断(取消)程序。我们可以观察到
KeyboardInterrupt
异常被触发,程序退出。但是在程序退出之前,finally
从句仍然被执行,把文件关闭。
本作品采用《CC 协议》,转载必须注明作者和本文链接
by JeffreyBool blog :point_right: link