异常捕获
1、什么是异常
程序执行过程中出现错误,也叫出现异常。
2、异常捕获
让本来会出现异常的位置,不出现异常,而是自己去处理异常出现的情况。
3、怎么捕获异常
a.情况一:捕获所有的异常
语法1:
try:
代码段1
except:
代码段2
执行过程:执行代码段1 如果代码段1中出现异常,不会崩溃,而是马上执行代码段2;如果代码段1没有异常,不会执行代码段2。
示例:
try:
print('~~~~~~~~~')
print([1, 2, 3][10])
print('+++++++')
except:
print('出现异常!')
b.情况二:捕获指定的异常
语法:
try:
代码段1
except 错误类型名:
代码段2
执行过程:执行代码段1,当代码段1出现指定类型的异常后不崩溃,而是执行代码段2。
示例:
try:
print([1, 2, 3][10])
print(int('abc'))
print('~~~~~~~~~~')
print('+++++++')
except IndexError:
print('下标越界!')
c.情况三:同时捕获多个异常,对不同的异常做出相同的反应。
语法:
try:
代码段1
except (错误类型1, 错误类型2, 错误类型3...):
代码段2
执行过程:执行代码段1,当代码段1中出现了指定的异常,不崩溃,然后执行代码段2。
示例:
try:
print({'a': 1}['b']) # KeyError
print(int('abc')) # ValueError
print([1, 2, 3, 4][10]) # IndexError
except (IndexError, KeyError, ValueError, FileNotFoundError, StopIteration):
print('出现多种异常中的一个!')
d.情况四:同时捕获多个异常,对不同的异常做出不同的反应。
语法:
try:
代码段1
except 错误类型1:
代码段2
except 错误类型2:
代码段3
...
except 错误类型n:
代码段n
示例:
try:
print({'a': 1}['b']) # KeyError
print(int('abc')) # ValueError
print([1, 2, 3, 4][10]) # IndexError
except IndexError:
print('出现IndexError异常!')
except KeyError:
print('出现KeyError异常!!')
except ValueError:
print('出现ValueError异常!')
except FileNotFoundError:
print('出现FileNotFoundError异常!')
except StopIteration:
print('出现StopIteration异常!')
4、try - except - finally关键字
语法:
try:
代码段1
except 错误类型:
代码段2
finally:
代码段3
说明:不管代码段1中是否出现异常,也不管异常是否能够被捕获到
finally后面的代码段3都会执行。
5、什么时候使用异常捕获
明明知道某段代码可能会出现异常,但是又没有办法避免,就使用异常捕获。
三、抛出异常
抛出异常:主动让程序出现异常
语法:
- raise 错误类型 - 程序执行到raise语句的时候直接抛出异常
**注意:**错误类型必须是一个类,并且这个类是Exception的子类。
示例:
# 输入年龄 如果输入的年龄范围不在0 ~ 100 程序就崩溃
class AgeError(Exception):
def __str__(self):
return '年龄越界了!'
age = int(input('请输入年龄(0 ~ 100):'))
if 0 <= age <= 100:
print('年龄是:', age)
else:
raise AgeError