Python學習系列之exit語句

一、定義

1.1 exit()

exit():結束整個程序。

       在python中運行一段代碼,如果在某處已經完成整次任務,可以用exit退出整個運行。並且還可以在exit()的括號里加入自己退出程序打印說明。不過注意在py3中要加單引號或雙引號。

1.2 os._exit() vs sys.exit() vs exit()

python的程序有多種退出方式:os._exit(), sys.exit(),exit()/quit()。

1.2.1 sys.exit()

Help on built-in function exit in module sys:在模塊sys中,可以幫助內置函數退出的。

一般是退出Python程序的首選方法。該方法中包含一個參數status,默認爲0,表示正常退出, 其他都是異常退出。

sys.exit()會引發一個異常:SystemExit,這是唯一一個不會被認爲是錯誤的異常

如果這個異常沒有被捕獲,那麼python解釋器將會退出。如果有捕獲此異常的代碼,那麼這些代碼還是會執行。捕獲這個異常可以做一些額外的清理工作。n默認值爲0,0爲正常退出其他數值(1-127)爲不正常,可拋異常事件供捕獲。一般主程序中使用此退出。

SystemExit 並不派生自Exception 所以用Exception捕捉不到該SystemEixt異常,應該使用SystemExit來捕捉。

1.2.2 os._exit()

os._exit() 會直接將python程序終止,之後的所有代碼都不會繼續執行。退出 Python 解釋器,不拋異常, 不執行相關清理工作,其後的代碼都不執行。其使用會受到平臺的限制,但我們常用的Win32平臺和基於UNIX的平臺不會有所影響, 常用在子進程的退出。一般來說os._exit() 用於在線程中退出,sys.exit() 用於在主線程中退出。

os._exit() 調用 C 語言的 _exit() 函數。

1.2.3 exit()/quit()

exit()/quit(),拋出SystemExit異常,類似於sys.exit()。一般在交互式shell中退出時使用。

1.2.4 區別

綜上,sys.exit()的退出比較優雅,調用後會引發SystemExit異常,可以捕獲此異常做清理工作。os._exit()直接將python解釋器退出,餘下的語句不會執行。

  • 一般在fork出來的子進程中使用os._exit(),os._exit() 用於在子進程,線程中退出 。
  • sys.exit() 用於在主線程中退出。

1.2.5 exit()與sys.exit()

exit() 跟 C 語言等其他語言的 exit() 應該是一樣的。 

一開始覺得exit()sys.exit()用法完全一樣,是不是一個函數,後來在stackoverflow中看到一個答案也不知道對不對,先這樣理解吧:

exit is a helper for the interactive shell - sys.exit is intended for use in programs.

The site module (which is imported automatically during startup, except if the -S command-line option is given) adds several constants to the built-in namespace (e.g. exit)They are useful for the interactive interpreter shell and should not be used in programs

exit is defined in site.py and _sitebuiltins.pysys.exit does so in sysmodule.c 

        也就是說exit是用於用戶交互式shell,而sys.exit纔是內部編碼使用的。site是自動導入的模塊,類似於lang包,裏面有一些可以直接用的函數比如exit,但多用於交互式的shell,而不應該用於編碼中。

builtin.exit 是一個 Quitter 對象,這個對象的 call 方法會拋出一個 SystemExit 異常。

1.3 exit(0)和exit(1)

exit(0) 在很多類型的操作系統裏,exit(0) 可以中斷某個程序,而其中的數字參數則用來表示程序是否是碰到錯誤而中斷。

exit(1) 表示發生了錯誤;exit(0) 則表示程序是正常退出的。
退出代碼是告訴解釋器的(或操作系統)。實際運用中可以使用任何整型數據,表示不同的自定義錯誤類型。

二、總結

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章