针对 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!**