异常简介
异常是指在语法正确的前提下,程序运行时报错就是异常
当python脚本发生了异常时我们需要捕获它,否则程序会终止执行。
捕获异常
1 基本语法
try:
...代码1...
..代码2...
except 异常类型:
..代码3...
try中一旦检测到异常,就执行这个位置的逻辑
try:
print('start...')
print(1/0)
print('end...')
except ZeroDivisionError:
print('try中的代码执行出错了就执行这里的代码')
print('程序结束')
执行流程:
先执行try中的代码,如果代码2报错,则不会执行代码3,执行的是exception中的代码
注意:
如果发生的异常类型和捕获的异常类型不一致,程序还会报错。
except 捕获多个异常
异常捕获流程:依次捕获,直到捕获到对应的异常
1 多分支格式:
try:
执行的代码1
except 异常类型:
执行的代码2
except 异常类型:
执行的代码3
except 异常类型:
执行的代码3
try:
print('start')
lst = [12,3]
# print(1/0)
print(lst[2])
print('end')
except ZeroDivisionError:
print('除数为零了')
except IndexError:
print('索引越界')
print('程序结束了')
二 元组结构形式:
try:
执行的代码
except(异常类型1,异常类型2,异常类型3):
捕获异常.....
try:
print('start')
lst = [12,3]
# print(1/0)
print(lst[2])
print('end')
except (ZeroDivisionError,IndexError):
print('捕获异常')
print('程序结束了')
3 获取异常的信息描述
try:
执行代码...
except 异常类型 as 变量名:
执行异常
try:
print('程序开始')
print(1/0)
except ZeroDivisionError as e:
print(e)
# division by zero
4 else
在if中,它的作用是当条件不满足时执行的实行;同样在try...except...中也是如此,即如果没有捕获到异常,那么就执行else中的事情
try:
print('haha')
print(1/0)
except:
print('捕获到了异常')
else:
print('没有发生异常')
注意 : else 一定要有except 否则语法报错
5 try...finally...
try...finally...语句用来表达这样的情况:
在程序中,如果一个代码段必须要执行,即无论异常是否产生都要执行,,那么此时就需要用到finally
比如文件关闭,释放锁,把数据库连接返回给连接池中。
说明: 不管try中语句有没有执行成功,都会执行finally当中的
try:
print('aaa')
print(1/0)
lst=[]
print(lst[0])
except ZeroDivisionError as e:
print(e)
except IndexError as e :
print(e)
finally:
print('无论有没有异常都要执行')
"""
aaa
division by zero
无论有没有异常都要执行
"""
6 触发异常
可以用raise语句来引发一个异常,异常、错误对象必须要有一个名字,而且他们应该是Error或者Exception的子类
(1)使用raise抛出系统的异常
raise IndexError('索引异常')
while True:
name = input('请输入姓名(不能少于3位):')
try:
if len(name) < 3:
raise Exception('姓名太少了,请重新输入')
else:
pwd = input('请输入密码')
print(name,pwd)
except Exception as e:
print(e)