大家好,我是欧K。
异常是我们学习和生活中的常客,在编程时遇到的异常我们俗称为“Bug”,Bug的预防和处理关乎到代码质量的高低,今天我总结了Python中try-except-else-finally各种异常的处理逻辑,希望对你有所帮助。
什么是异常,什么是异常程序?
异常:程序正常执行过程中出现的不正常的情况,该情况影响了程序的正常执行。
异常程序:是指程序执行的非法指令,比如常见的非法操作码,地址越界,算术溢出等,异常程序的出现一般有两种情况:
异常处理
异常处理是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况,即超出程序正常执行流程的某些特殊条件。
Python提供了两个非常重要的功能来处理程序在运行中出现的异常和错误。经常使用的是try…except语句,拓展一下就是try-except-else-finally,另一个是断言(这个后面再讲)。
语法:
name为异常类型,可指定可不指定:
try:
# 代码段1
pass
except name:
# 代码段2
pass
else:
# 代码段3
pass
finally:
# 代码段4
pass
实例1(无return)
1.1 除数为0.0,不使用try的话程序会报错直接退出
a = 5.0 / 0.0
print('输出:我是try')
# ZeroDivisionError: float division by zero
try:
a = 5.0 / 0.0
print('输出:我是try')
except :
print('输出:我是except')
# 输出:我是except
加上else和finally,执行逻辑:try–>except–>finally
try :
a = 5.0 / 0.0
print('输出:我是try')
except :
print('输出:我是except')
else :
print('输出:我是else')
finally :
print('输出:finally')
# 输出:我是except
# 输出:finally
1.2 除数为1.0,即正常程序:
执行逻辑:try–>else–>finally
try :
a = 5.0 / 1.0
print('输出:我是try')
except :
print('输出:我是except')
else :
print('输出:我是else')
finally :
print('输出:finally')
# 输出:我是try
# 输出:我是else
# 输出:finally
实例2(有return,较为复杂,需仔细)
2.1 除数为0.0
2.1.1 执行逻辑:try–>except–>finally
程序在except内部虽然已经return了,但是finally依然会被执行,此时finally亦有return,则输出为finally代码段的返回值。
def test():
try :
a = 5.0 / 0.0
print('输出:我是try')
return 0
except :
print('输出:我是except')
return 1
else :
print('输出:我是else')
return 2
finally :
print('输出:finally')
return 3
print('test: ',test())
# 输出:我是except
# 输出:finally
# test: 3
2.1.2 执行逻辑:try–>except–>finally,返回except代码段返回值
程序在except内部虽然已经return了,但是finally依然会被执行,此时finally内部没有return,则最终输出except代码段的返回值。
def test():
try :
a = 5.0 / 0.0
print('输出:我是try')
return 0
except :
print('输出:我是except')
return 1
else :
print('输出:我是else')
return 2
finally :
print('输出:finally')
print('test: ',test())
# 输出:我是except
# 输出:finally
# test: 1
2.2 除数为1.0
2.2.1 执行逻辑:try–>else–>finally
程序在try内部虽然已经return了,但是else和finally依然会被执行,此时finally有return,则输出为finally代码段的返回值。
def test():
try :
a = 5.0 / 1.0
print('输出:我是try')
return 0
except :
print('输出:我是except')
return 1
else :
print('输出:我是else')
return 2
finally :
print('输出:finally')
return 3
print('test: ',test())
# 输出:我是try
# 输出:finally
# test: 3
2.2.2 执行逻辑:try–>finally,返回try代码段返回值
程序在try内部已经return了,else不会被执行,finally会被执行,此时finally没有return,则输出为try代码段的返回值。
def test():
try :
a = 5.0 / 1.0
print('输出:我是try')
return 0
except :
print('输出:我是except')
return 1
else :
print('输出:我是else')
return 2
finally :
print('输出:finally')
# return 3
print('test: ',test())
# 输出:我是try
# 输出:finally
# test: 0
2.2.3 执行逻辑:try–>else–>finally,返回else代码段返回值
程序在try内部无return,else将会被执行,finally也会被执行,此时finally没有return,则输出为else代码段的返回值。
def test():
try :
a = 5.0 / 1.0
print('输出:我是try')
# return 0
except :
print('输出:我是except')
return 1
else :
print('输出:我是else')
return 2
finally :
print('输出:finally')
# return 3
print('test: ',test())
# 输出:我是try
# 输出:我是else
# 输出:finally
# test: 2
总结:
以上就是本期为大家整理的全部内容了,赶快练习起来吧,喜欢的朋友可以点赞、收藏也可以分享到朋友圈让更多人知道
推荐阅读
技巧 | Python 字典用法详解(超全)
技巧 | Python 列表经典使用技巧
技巧 | 20个Pycharm最实用最高效的快捷键(动态展示)
可视化 | 动起来的中国大学排名,看看你的母校在哪里
可视化 | Python时间序列化NBA球星赛季数据
可视化 | Python制作最炫3D可视化地图
微信公众号 “Python当打之年” ,每天都有python编程技巧推送,希望大家可以喜欢