2017-08-10 65 views
4

對於一個簡單的python腳本,它不會啓動任何線程或分支任何進程,簡單地讓執行到達腳本的末尾並顯式調用quit(),exit()或sys.exit()之間有什麼區別?Python:顯式退出和簡單地讓執行到達文件末尾有什麼區別?

即什麼是我問這個,因爲我一直有在腳本終止一些奇怪的垃圾收集問題

def main(): 
    # do some stuff 
    print("Done doing stuff") 

if __name__ == '__main__': 
    main() 

import sys 

def main(): 
    # do some stuff 
    print("Done doing stuff") 
    # explicit exit 
    sys.exit() 

if __name__ == '__main__': 
    main() 

之間的差值(從__del__引發的異常顯然是由於清理事情的順序),而不需要明確的exit()調用,並且添加明確的exit()似乎可以糾正這些問題。或者至少在撥打exit()後打印出的這些例外情況都不會被打印出來,也許他們只是被沉默了。

+0

從我爭取的'sys.exit()'允許「終於」條款,其中清理功能是內置的一些嘗試塊被激活提出例外,從而給予「更清潔」的退出。 – Uvar

+0

https://docs.python.org/3/library/sys.html#sys.exit「這是通過引發SystemExit異常實現的,因此try語句的finally子句指定的清理操作得到遵守」。另一個有趣的注意事項是清理時捕獲的緩衝錯誤,導致退出代碼變爲120 – BoboDarph

+0

我相信這應該回答您的問題:https://stackoverflow.com/questions/19747371/python-exit-commands-爲什麼這麼多,什麼時候該被使用 –

回答

0

在您發佈的情況下,沒有任何區別。但是,您可能希望終止您的程序而無需等待它完成的情況。

一個平庸的例子:

try: 
    ... 
except KeyboardInterrupt: 
    x = input('Sure you want to exit? y/n') 
    if x == 'y': 
     quit() 
    else: 
     pass 
+0

有一些區別,因爲我在某些實例化對象中的'__del__'中出現異常,這是由於當我*不顯式調用exit()或sys.exit時,python清理的順序()' –

+0

然後你可以發佈實際的代碼嗎?很難看出你的代碼段有什麼不同。 –

+0

由於涉及python-ivi,pyvisa,NI-VISA以及與實際測試設備的開放連接,我現在還沒有一個好的,便攜式的最簡單的例子。 –

相關問題