_异常的本质_调试核心理念
Traceback追溯,追根溯源。most recent call last 最后一次调用。
_try_except基本结构
try:
被监控的可能引发异常的语句块
except BaseException[as e]:
异常处理语句块
测试简单的的0不能做除数异常
try:
print("step1")
a = 3 / 0
print("step2")
except BaseException as e:
print("step3")
print(e)
print("step4")
#输出:step1
step3
division by zero
step4
示例:循环输入数字,如果不是数字则处理异常。直到输入88,则结束循环
while True:
try:
x = int(input("请输入一个数字"))
print("输入的数字:",x)
if x== 88:
print("退出程序")
break
except BaseException as e:
print(e)
print("异常,输入的不是一个数字")
print("循环数字输入程序结束!")
_try_多个except结构.
try:
被监控的、可能引发异常的语句块
except Exception1:
处理Exception1的语句块
except Exception2:
处理Exception2的语句块
……
except BaseException
处理可能遗漏的异常的语句块
测试try…多个except结构
try:
a = input("请输入一个被除数:")
b = input("请输入一个除数:")
c = float(a) / float(b)
print(c)
except ZeroDivisionError:
print("异常。不能除以0")
except ValueError:
print("异常。不能将字符串转化为成数字")
except NameError:
print("异常。变量不存在")
except BaseException as e:
print(e)
try…except…else结构:
如果try块中没有抛出异常,则执行else块。如果try块中抛出异常,则执行except块,不执行else块。
测试trr…except…else结构
try:
a = input("请输入被除数:")
b = input("请输入除数:")
c = float(a) / float(b)
except BaseException as e:
print(e)
else:
print("除的结果是:", c)
try…except…finally
finally 块无论是否发生异常都会被执行
测试try…except…finally
try:
a = input("请输入一个被除数:")
b = input("请输入一个除数:")
c = float(a) / float(b)
except BaseException as e:
print(e)
else:
print(c)
finally:
print("我是finally中的语句,无论发生异常与否,都执行!")
print("程序结束!")
测试finally
try:
f = open("d:/adddd.txt", "r")
content = f.readline()
print(content)
except:
print("文件未找到")
finally:
print("run in finally.关闭资源")
try:
f.close()
except BaseException as e:
print(e)
print("程序执行结束!")
一般不要将return 语句放到try、except、else、finally块中,会发生一些意想不到的错误。建议放到方法最后。