导引问题
异常,EXCEPTION
异常机制本质
Tracecheck 追溯
most recent call last 最后一次调用
碰到错误 不要慌
Try…一个except结构
try 区块 包含着可能引发异常的代码,except块则用来捕捉和处理发生的异常。执行的时候,如果try块中没有引发异常,则跳过except块继续执行后续代码,如果try块发生了异常,则跳过try,执行except块,进行异常的处理。处理完一场之后,继续执行后续代码。
try:
XXXX
except BaseException as e
XXXX
后续代码
XXX
#!测试异常
print("step0")
try:
print("step1")
a=3/0
print("step2")##遇到异常的时候 这一步无法执行
except BaseException as e : ##这一步来处理异常
print("step3")##异常处理之后,继续执行
print(e)
print(type(e))
print("end!!!")#跳出except之后 ,继续执行正常的代码
#!测试异常
print("step0")
try:
print("step1")
a=3/2 ##此处无异常,整除执行
print("step2")##遇到异常的时候 这一步无法执行
except BaseException as e : ##这一步不进行执行
print("step3")
print(e)
print(type(e))
print("end!!!")#跳出try之后 ,继续执行正常的代码
测试一个例子:输入88结束
第一步,输入一个正常的例子
#测试:循环输入数字,如果不是数字则处理异常,直到数字输入88,结束循环
while True:
x=int(input("请输入一个数字:"))#对输入的数字进行取整
print("输入的数字:",x)
if x==88:
print("退出程序")
break
print ("循环数字输入程序结束!")
第二步:
#测试:循环输入数字,如果不是数字则处理异常,直到数字输入88,结束循环
while True:
try:
x=int(input("请输入一个数字:"))#对输入的数字进行取整
print("输入的数字:",x)
if x==88:
print("退出程序")
break
except BaseException as e:
print(e)
print("异常,输入的不是数字")
print ("循环数字输入程序结束!")
try …多个except 结构
这里需要注意的是,捕获可能出现的多个异常值时,按照先子类再父类的顺序,并且针对性的写出异常处理代码。写完这些EXCEPTION1,2,3…之后,为了避免以后,可以在最后增加BaseException
在不确定子类父类的关系时,
diagram 可以帮助我们查看
try …except…else结构
我们发现,无异常的时候,try 执行,except 不执行,但是finally要执行。
这都结束之后,最后执行正常语句,即finally下面的。
无异常的时候,try 执行到异常处停止执行,except 要执行,finally也要执行。
finally下面的语句就不能执行啦。
如果想要执行剩下的语句,需要在finally 里面再+try except。。。
return 语句和异常处理问题
常见异常的解决
由于finally 有无异常都执行
用with来进行上下文管理,便于实时释放资源
with 不是用来取代 try …except…finally 结构的,而是作为补充,方便我们在文件管理/网络通信时的开发。
对比两个结构的表述,with 更加简单
Traceback :
自定义异常类:
Pycharm 开发环境的调试模式