一、基本语法
获取异常信息描述格式:
try:
…代码1…
…代码2…
…代码3…
except 异常类型 as 变量名:
…代码4…
注意:
变量名中保存的是异常信息
try:
print('start..')
print(1/0)
print('end...')
except ZeroDivisionError as e: #e为变量名,用来保存异常信息
print('捕获到了异常')
print(e)
运行结果:
捕获到了异常
division by zero
执行流程:
先执行try中的代码,如果代码2报错,则不会执行代码3,执行执行exception中的异常代码。
注意:
如果发生的异常类型和捕获的异常类型不相同,还是不能捕获异常,程序还会结束。
二、 捕获多个异常
捕获所有异常:
格式1:
try:
…代码1…
…代码2…
…代码2…
except:
…代码4…
注意:
except不用写任何内容即可:
try:
print(1 / 0)
lst = []
print(lst[1])
except:
print('捕货到了异常')
print('程序结束了...')
运行结果:
捕货到了异常
程序结束了...
格式2::
try:
…代码1…
…代码2…
…代码3…
except Exception:
…代码4…
Exception是各种异常类型的父类
try:
print(1 / 0)
lst=[]
print(lst[1])
except Exception:
print('捕获到了异常')
print('程序结束了')
运行结果:
捕获到了异常
程序结束了
三、else结构
咱们应该对else并不陌生,在if中,它的作用是当条件不满足时执行的实行;同样在try…except…中也是如此,即如果没有捕获到异常,那么就执行else中的事情
格式:
try:
… 代码1…
… 代码1…
… 代码1…
except 异常类型:
…代码4…
else:
…代码5…
try:
print('开始了1...')
# print(1/0)
print('结束了')
except Exception:
print('异常了')
else:
print('哈哈哈')
print('程序执行完毕')
运行结果:
开始了1...
结束了
哈哈哈
程序执行完毕
四、try…finally结构
try…finally…语句用来表达这样的情况:
在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等。
说明:不管try语句有没有执行成功,都会执行finally当中的
格式:
try:
...代码1...
...代码2...
except 异常类型:
...代码3...
finally:
...代码4...
此种结构无论如何都会执行finally中的代码
try:
print(1/0)
except ZeroDivisionError:
print('报错了')
finally:
print('都得执行我')
print('程序结束了...')
try:
lst=[]
print(lst[1])
except IndexError:
print("程序报错了啊")
finally:
print('都得执行')
print('程序结束了哦...')
运行结果:
报错了
都得执行我
程序结束了...
程序报错了啊
都得执行
程序结束了哦...
五、抛出系统异常
你可以用raise语句来引发一个异常,异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类。
练习:判断输入字符串的长度,如果小于指定的长度就报错
while True:
try:
name = input('请输入姓名:')
if len(name) < 3:
raise Exception('输入的名字长度太短')
else:
pwd = input('请输入密码:')
print(name, pwd)
except Exception as e:
print(e)
运行结果:
请输入姓名:ll
输入的名字长度太短
请输入姓名:123
请输入密码:123
123 123
请输入姓名: