python异常try-except-else-finally解析

深入探讨Python中try-except-else-finally语句的执行逻辑,分析不同场景下return语句的影响,揭示finally语句的执行特性。

针对 try - except - else - finally 对异常得处理进行解析!

结论

** 1. else语句只有在try中没有异常,没有return时才会作用!**
** 2. finaly语句必然会执行,如果finally含有return,必然执行finally的return语句!其他return都将失效1**
** 3. finally 没有return时候,其他程序按顺序执行,并在执行到return时先将finally执行完毕再去return!**

根据是否有return语句分开处理

无return时
def test_abnormity():
try:
    print('in try')
    raise IndexError('自抛indexError')
    print("I've already thrown an exception")# 要注意哦,在raise之后,这句print必然不执行!
#    return 0

except KeyError as e:
    print("in KeyError except")
    print(e)
 #   return 1

except IndexError as e:
    print("in IndexError except")
    print(e)
 #   return 2

else:
    print("no exception")
    return 3

finally:
    print("in finally")
 #   return 4

result = test_abnormity()
print(result)

结果:

in try
in IndexError except
自抛indexError
in finally
None
没有return时,程序首先执行try,然后进入自抛异常,最后执行finally,返回None

全部带上return

def test_abnormity():
try:
    print('in try')
    raise IndexError('自抛indexError')
    print("I've already thrown an exception")  # 这句因raise存在所以不执行
    return 0

except KeyError as e:
    print("in KeyError except")
    print(e)
    return 1

except IndexError as e:
    print("in IndexError except")
    print(e)
    return 2

else:												# 因try中有return,也必定不会执行
    print("no exception")
    return 3

finally:
    print("in finally")
    return 4
    
    result = test_abnormity()
    print(result)

结果:

    in try
    in IndexError except
    自抛indexError
    in finally
    4

finally是必然执行的,所以同时存在return时, 必然执行finally中得return!

只去掉finally的return

"""

this is a test of code path in try…except…finally
“”"

def test_abnormity():
try:
print(‘in try’)
raise IndexError(‘自抛indexError’)
print(“I’ve already thrown an exception”)
return 0

except KeyError as e:
    print("in KeyError except")
    print(e)
    return 1

except IndexError as e:
    print("in IndexError except")
    print(e)
    return 2

else:
    print("no exception")
    return 3

finally:
    print("in finally")
    
    result = test_abnormity()
    print(result)

结果:

in try
in IndexError except
自抛indexError
in finally
2

finally 会执行,但是会返回异常中的return!

后面进行了try中不抛异常带return,和不抛异常不return得情况。

最后得出结论:

** 1. else语句只有在try中没有异常,没有return时才会作用!**
** 2. finaly语句必然会执行,如果finally含有return,必然执行finally的return语句!其他return都将失效1**
** 3. finally 没有return时候,其他程序按顺序执行,并在执行到return时先将finally执行完毕再去return!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值