异常捕获
1.什么是异常
- 程序执行过程中出现错误,也叫出现异常
2.异常捕获
让本来会出现异常的位置,不出现异常,而是自己去处理异常出现的情况
情况1:捕获所有的异常
语法1:
try:
代码段
except:
代码段2
执行过程:
执行代码段1 ,如果代码段1出现异常,不会崩溃,而是马上执行代码段2.
如果代码段1没有异常,不会执行代码段2
try :
print([1,2][3])
except:
print('出现异常')
print('======')
情况2 捕获指定异常
a.语法
try:
代码段2
exceot:错误类型名
代码段2
- 执行过程:执行代码段1,当代码段1出现指定类型的异常后,程序不崩溃,而是执行代码段2
try :
print([1,2][3])
print(int('abc'))#不执行
except IndexError:
print('下标越界')
print('======')
情况3:同时捕获多个异常,同时处理,对不同的异常做出相同的反应
try:
代码段1
except(错误类型1,错误类型2,错误类型3,......):
代码段2
执行过程:执行代码段1,如果代码段1中出现了指定的异常,程序不会崩溃,会执行代码段2,
try :
print([1,2][3])
print(int('abc'))
except(ValueError,IndexError):
print('出错啦')
print('======')
情况4:同时捕获多个异常,同时处理,对不同的异常做出不同的反应
try:
代码段1
except(错误类型1):
代码段2
except(错误类型2):
代码段3
except(...) :
..........
- 执行过程:执行代码段1,如果代码段1中出现了指定的异常,程序不会崩溃,会执行代码段2,
try :
# print([1,2][3])
print(int('abc'))
except(IndexError):
print('值错误')
except(ValueError):
print('下标错了')
print('======')
3.finally
try:
代码段1
except(错误类型1,错误类型2,错误类型3,......):
代码段2
finally:
代码段3
- 不管代码段1是否出现异常,也不管异常是否能捕获,finally后面的代码段3都会执行
# try :
# # print([1,2][3])
# print(int('abc'))
# except(IndexError):
# print('值错误')
# finally:
# print('抢救失败')
- 什么时候使用异常捕获
明明知道某段代码可能会出现异常,但又没有办法避免,就使用异常捕获
#统计学生成绩,知道输入的结果是’end‘ 求和
# while True:
# try:
# score = int(input('输入成绩:'))
# except ValueError:
# print('输入有误,请输入数字')
# score = int(input('输入成绩:'))
# finally:
# sum()
#封装一个函数,功能是获取指定文件中的内容(普通文件)
def get_value(file):
try:
with open(file,'r',encoding='utf-8') as f:
content = f.read()
return content
except FileNotFoundError:
print('文件路径错误')
return ''
get_value('ceshi.txt')
抛出异常
抛出异常:主动让程序崩溃
语法:
raise 错误类型 - 程序执行到raise的时候直接抛出异常
注意:错误类型必须是一个类,并且这个类是Exception的子类
#输入年龄,如果输入的年龄的范围不在0-100,程序就崩溃
num = int(input('年龄'))
if num > 100 or num < 0:
raise ValueError