亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有Return語句的奇怪的Try-Except-Else-Finally行為

帶有Return語句的奇怪的Try-Except-Else-Finally行為

慕桂英546537 2019-12-12 12:10:19
這是一些行為特殊的代碼。這是我編寫的行為的簡化版本。這仍然會顯示出怪異的行為,我對為什么會發生這種現象有一些特定的疑問。我在Windows 7上使用Python 2.6.6。def demo1():    try:        raise RuntimeError,"To Force Issue"    except:        return 1    else:        return 2    finally:        return 3def demo2():    try:        try:            raise RuntimeError,"To Force Issue"        except:            return 1        else:            return 2        finally:            return 3    except:        print 4    else:        print 5    finally:        print 6結果:>>> print demo1()3>>> print demo2()63為什么演示1返回3而不是1?為什么演示2打印6而不是打印6 w / 4或5?
查看完整描述

3 回答

?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

因為保證可以執行finally語句(因此,假定沒有斷電或Python無法控制的任何事情)。這意味著在函數可以返回之前,它必須運行finally塊,該塊返回一個不同的值。


在Python文檔狀態:


當在try ... finally語句的try套件中執行return,break或Continue語句時,finally子句也會在“出路”上執行。在finally子句中,continue語句是非法的。(原因是當前實施存在問題-將來可能會取消此限制)。


這意味著,當您嘗試返回時,將finally調用該塊,并返回其值,而不是原來的值。



查看完整回答
反對 回復 2019-12-13
?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

執行順序為:

  1. 嘗試阻止所有正常完成->最終阻止->函數結束

  2. 嘗試運行塊并進入異常A->最終阻塞->函數結束

  3. 嘗試塊返回值并調用返回->最終阻止->彈出返回值->函數結束

因此,finally塊中的任何返回都將提前結束步驟。



查看完整回答
反對 回復 2019-12-13
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

因為在return調用該語句時,Python會檢查是否finally需要執行任何打開的子句(請參見上面的引用)。

查看完整回答
反對 回復 2019-12-13
  • 3 回答
  • 0 關注
  • 371 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號