2011-11-08 24 views
2

重複調用Python中的exit()函數是一種不好的編碼習慣嗎?在Python中多次使用exit()

我工作的一個命令行工具,所以有多個函數定義...基本上:

def usage() 
def error(arg1) 
def find(arg1, arg2) 

usage()我打電話exit(),我以爲這是正常的結束,但它的也被稱爲在find()成功,並在error()(被稱爲在find()失敗。

正如你所看到的,exit()正在我的代碼調用了很多次,我不知道這實際上是一個錯誤的編碼練習。

回答

1

不是真的不好的做法IMO - 只要確保你返回退出代碼代表不同的出口點時,可能是調用進程有用...

1

我這樣做,在我的腳本所有的時間。一般來說,你不需要擔心,因爲在程序終止之前,python會負責清理系統。我也曾經這麼做

signal.signal(signal.SIGTERM, lambda *args: sys.exit(0)) 

強制系統清理,以防我需要殺死停滯的腳本。

4

它確實可以在多個位置調用exit(),並且如果它只是使用它的簡單程序,那沒有問題。但在我看來,如果有多個退出點,它總會使檢查/調試代碼更加複雜。特別是如果您認爲其他開發人員在某些時候會修改您的代碼,或者您會將部分代碼作爲庫提供給其他開發人員。

其他選項是引發異常並在外部函數上捕獲它們。這樣你在退出之前也有機會做一些額外的任務(例如發佈一些資源)。

+1

exit()實際上會引發異常,所以'finally'塊會開始運行。不過,用於引發比'SystemExit'更具體的異常的+1。 –

+0

這是一個很好的觀點,但它只是一個很小的程序,當某些內容傳遞給'def error()'時,它實際上並不是一個錯誤,而是一個表明程序無法在文件中找到指定條目的跡象 – Matoe