标签:执行顺序 com except class raise 作用 finally mic code
用逻辑流程图来表示这三者的执行关系吧:
呃..画完我就后悔了,这种表示方法根本不简洁直观.
简单的说,
try + except 的组合,大家都很清楚了:
try 中无异常,不执行except
try中遇到异常,就停止当前语句, 去执行except中的语句
finally 的作用是,
try 和 except 执行中:
1. 执行完最后一个语句后(如最后一条语句不是return)
2. return Value 前
都会触发finally的执行.
而在finally中的语句执行后,同样有两种情况:
1.如果finally中有return ,那么代码就在finally中返回。
2.如果finally中没有return ,那么代码会返回到触发finally的语句处,继续执行。
(即是说,如果是try/except中的 return Value 触发了finally ,且finally中没有return,那么执行完finally后,会返回去执行触发了finally的那个 return Value)
例子: finally 中不带return
def tef_raise(): try: print("I am in ‘try‘") raise() return ‘try‘ except: print("I am in ‘except‘") return ‘except‘ finally: print("I am in ‘finally ,and i don‘t return‘")
输出:
I am in ‘try‘
I am in ‘except‘
I am in ‘finally ,and i don‘t return‘
‘except‘
可见,执行顺序是 try->except->finally->except中的 return
例子:finally中有return
def tef_raise(): try: print("I am in ‘try‘") raise() return ‘try‘ except: print("I am in ‘except‘") return ‘except‘ finally: print("I am in ‘finally") return ‘finally‘
输出:
I am in ‘try‘
I am in ‘except‘
I am in ‘finally
‘finally‘
python 同一层的try, except,finally ,执行顺序是什么
标签:执行顺序 com except class raise 作用 finally mic code
原文地址:https://www.cnblogs.com/stonenox/p/11249133.html