簡體   English   中英

為什么finally塊在調用除塊之外的sys.exit(0)后執行?

[英]Why finally block is executing after calling sys.exit(0) in except block?

我是Python的新手。 我只是想知道為什么finally塊被調用后執行sys.exit(0)except塊?

碼:

import sys

def sumbyzero():
    try:
        10/0
        print "It will never print"
    except Exception:
        sys.exit(0)
        print "Printing after exit"
    finally:
        print "Finally will always print"

sumbyzero() 

順便說一句,我只是嘗試做與Java相同的事情,當System.exit(0)catch塊中時, 執行finally塊。

所有sys.exit()都會引發SystemExit類型的異常。

文檔

退出Python。 這是通過引發SystemExit異常來實現的,因此可以遵循try語句的finally子句指定的清除操作,並且可以攔截外層的退出嘗試。

如果你運行以下內容,你會親眼看到:

import sys
try:
  sys.exit(0)
except SystemExit as ex:
  print 'caught SystemExit:', ex

作為替代方案, os._exit()將繞過大部分清理過程,包括finally塊等。

關於你的例子:

在離開try語句之前總是執行finally子句,無論是否發生了異常。

這是來自Python文檔的錯誤和異常部分。 所以 - 除非你使用os._exit()否則你的finally塊將始終在你展示的例子中執行。 但你應該明智地使用它......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM