2017-08-10 74 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以及与实际测试设备的开放连接,我现在还没有一个好的,便携式的最简单的例子。 –

相关问题