一、异常
异常是指在语法正确的前提下,程序运行时报错就是异常。 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
二、异常捕获
1.基本语法
语法格式 | 执行流程 |
---|---|
try: …代码1…代码2… …代码3… except 异常类型: …处理异常代码… | 程序从上往下执行,先执行try中 的代码,如果代码1报错,则不会 执行代码2和3,执行执行 exception中的异常代码。 如果try中没有报错,则不执行 except中的代码 |
try:
print("程序开始")
print(1/0)
print("程序结束")
except ZeroDivisionError:
print("程序有错")
结果:
程序开始
程序有错
- 捕获多个异常 如果一段代码中可能会触发多个异常,我们可以写一个try多个except来捕获多个异常。
try:
a=[1,2]
print(1/0)
print(a[3])
except ZeroDivisionError:
print("被除数不能为零")
except IndexError:
print("索引超出范围")
结果:
被除数不能为零
- 捕获所有异常
a=[1,3,4,5,6,7,88]
b=iter(a)
while True:
try:
print(next(b))
except StopIteration as e:
print(e)
break
结果:
1
3
4
5
6
7
88
- 获取异常信息描述
class A:
pass
x=10
print(A,x)
zd={"name":"张三"}
try:
print(zd["age"])
except KeyError as e:
print(e)
结果:
<class '__main__.A'> 10
'age'
- else格式
try:
print("haha")
print(1/0.3)
except Exception:
print("捕获到了异常")
else:
print("没有发生异常")
结果:
haha
3.3333333333333335
没有发生异常
- try…finally格式
a=[1,2]
try:
print("x")
print("y")
print(a[3])
print(2/0)
except:
print(2)
else:
print(3)
finally:
print("无论异常产生与否都要执行")
结果:
x
y
2
无论异常产生与否都要执行
三、触发异常 用户可以根据业务逻辑手动的抛出异常。并且用户可以根据需求来抛出系统异常(python已 经定义好的异常)和用户自定义的异常。
- 抛出系统异常
格式 | 描述 |
---|---|
raise 异常类型(‘描述信息’) | 当程序执行到raise是,会自动的 触发异常,让程序结束 |
while True:
name=input("请输入姓名,不能少于三个字")
try:
if len(name)<3:
raise Exception("姓名太少,请重新输入")
else:
pwd=input("请输入密码")
print(name,pwd)
except Exception as e:
print(e)
结果:
请输入姓名,不能少于三个字333
请输入密码222
333 222
请输入姓名,不能少于三个字
- 抛出自定义异常
当程序中的异常类型不满足时,我们可以自定义类型异常
class MyException(Exception):
def __init__(self,lenght,atlast):
self.lenght=lenght
self.atlast=atlast
def __str__(self):
return "您输入的长度是{},至少输入的长度是{}".format(self.lenght,self.atlast)
msg=input("请输入长度大于5")
try:
if len(msg)<5:
raise MyException(len(msg),5)
except MyException as e:
print(e)
结果:
请输入长度大于52
您输入的长度是1,至少输入的长度是5