异常处理
- 在程序运行过程中,总会遇到各种异常,如数据类型不正确、符号不正确、方法文件不存在等,我们通常使用try…except来捕获及处理异常
print('-----point-1-----')#输出
open('1234.txt')#通常此处没有123.txt这个文件时,程序执行起来会报错
print('-----point-2-----')#没有输出
#如下
try…except
#为了让程序不报错
try:
print('-----point-1-----')#输出
open('1234.txt')#通常此处没有123.txt这个文件时,程序执行起来会报错
print('-----point-2-----')#没有输出
except IOError:#FileNotFoundError是IOError的子类,所以会被捕获
print('程序出错了')
#输出如下
#同时我们可以输出错误类型
try:
print(num)
print('-----point-1-----')
open('1234.txt')
print('-----point-2-----')
except (IOError,NameError) as result1:#可以以元组的方式,指定多个异常种类
#并且可以将异常信息通过as指定存入一个变量中
print(result1)
print('程序出错了')
#输出如下
try…finally
- 在程序中,如果一段代码必须要执行,即无论异常是否产生都要执行(前面例子出现异常之后的代码块都不执行了),那么此时就要用到finally。比如文件关闭,释放锁,把数据库链接返还给连接池等。
- 在本节文件操作中,finally主要用途是关闭文件
try:
f = open('123.txt')
except Exception as result:#Exception是所有异常的父类
print('发生异常。。。')
finally:
f.close()
print('文件关闭')
#结果如下
因为文件f并没有被打开,所以无法关闭导致出错
- 解决方法:
try:
f = open('123.txt')
#如果打不开则直接进入except,不会执行并进入下面带有finally的代码块
#如果打得开,则进入下面带有finally的代码块,最终也会关闭文件
try:#异常捕获的嵌套
pass
finally:
f.close()
except Exception as result:
print('文件出错了')
print(result)