![](/img/trans.png)
[英]How to use multiple sys.exit() with different return codes inside a try except block in python
[英]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.