1.异常简介
异常是什么?什么时候会发生异常?话不多说,直接上代码。
当打开一个不存在的文件时,对文件操作比较熟悉就知道,一定会报错,不信的话,咱们试试?
print("----test1------")
f = open("123.txt","r") # 打开123.txt文件
print("----test2--------")
运行结果:
----test1------
Traceback (most recent call last):
File "F:/pythonProject/pythonProject/demo3-4.py", line 8, in <module>
f = open("123.txt","r")
FileNotFoundError: [Errno 2] No such file or directory: '123.txt'
说明:
打开一个不存在的文件123.txt,当找不到123.txt 文件时,就会抛出给我们一个IOError类型的错误,No such file or directory:123.txt (没有123.txt这样的文件或目录)
2.异常的概念
当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"
3.捕获异常
i.try…except…
代码示例:
try:
print("----test1------")
f = open("123.txt", "r")
print("----test2--------")
except IOError:
pass
运行结果:
----test1------
说明:
- 此程序看不到任何错误,因为用 except 捕获到了IOError异常,并添加了处理的方法
- pass 表示实现了相应的实现,但什么也不做;如果把pass改为print语句,那么就会输出其他信息
- 把可能出现的异常的代码放在try中,把会出现异常结果写在except中
- except可以捕获多个异常,用括号括起来,逗号隔开 ,示例如下
当出现多个异常时:
代码示例:
try:
print("----test1------")
f = open("123.txt", "r")
print("----test2--------")
print(num)
except (IOError,NameError): #捕获多个异常的写法
print("产生了异常")
4.捕获异常信息
代码示例:
try:
print("----test1------")
f = open("123.txt", "r")
print("----test2--------")
print(num)
except (IOError,NameError) as result: #捕获多个异常的写法,将异常信息存储在result中进行打印
print("产生了异常")
print(result)
5.try…except…finally…
在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等
代码示例:
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("没有这个文件")