如何终止Python脚本的执行?

197

我有一个简单的Python脚本,如果满足某个条件,我希望能够停止执行。

例如:

done = True
if done:
    # quit/stop/exit
else:
    # do other stuff

本质上,我正在寻找与函数体中的'return'关键字行为等效的东西,它允许代码流退出函数并不执行剩余的代码。

8个回答

330

要退出脚本,您可以使用:

import sys
sys.exit()

您也可以提供一个退出状态值,通常是一个整数。

import sys
sys.exit(0)

以零退出,通常被解释为成功。非零代码通常被视为错误。默认情况下,以零退出。

import sys
sys.exit("aa! errors!")

打印"aa! errors!"并以状态码1退出。 os模块中还有一个_exit()函数。sys.exit()函数引发SystemExit异常以退出程序,因此可以执行try语句和清理代码。os._exit()版本不会执行此操作。它只是结束程序而不执行任何清理或刷新输出缓冲区,因此通常不应该使用。 Python文档指出,os._exit()是使用调用os.fork()创建的子进程正常结束的方式,因此在某些情况下确实有用。

1
sys.stdout.flush()os._exit(0)的搭配正是我所需要的。谢谢! - Anconia
这在我的Anaconda Python上不起作用。 sys.exit() Traceback (most recent call last): File "<ipython-input-26-86e3364fd793>", line 1, in <module> sys.exit()AttributeError: 'System'对象没有属性'exit'。 - Roel Verhoeven
1
当前的Python 3.7.0在使用sys.exit(0)时会发出警告:SystemExit: 0 C:\Python37\lib\site-packages\IPython\core\interactiveshell.py:2969: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)。这个警告是否正常?它只是因为我正在使用iPython吗? - Dr_Zaszuś

22

你可以将脚本的主体放入一个函数中,然后从该函数中返回。

def main():
  done = True
  if done:
    return
    # quit/stop/exit
  else:
    # do other stuff

if __name__ == "__main__":
  #Run as main program
  main()

20
import sys
sys.exit()

19
您可以使用:

import sys
sys.exit(...)

或者:

raise SystemExit(...)

可选参数可以是退出代码或错误消息,两种方法都是相同的。我曾经更喜欢使用sys.exit,但最近我已经改用引发SystemExit,因为它似乎在代码中更加突出(由于raise关键字)。


6

使用exit()函数即可解决问题。


比我快三秒 :P - Dana
4
我先在终端中测试了一下 :-) - Sec
该死,我没及时看到/反应过来(还在解释器中测试以确保)摇拳头 ;) - Runevault
2
这仅适用于2.5版本及更高版本。 - Moe

6

尝试

sys.exit("message")

这就像是Perl语言一样。

die("message")

如果这就是您要找的内容,它会终止脚本的执行,即使它是从一个导入的模块/def/function中调用的。

5
没有任何答案提出过这样的方法吗? - SilentGhost

4

使用exit()即可。


3
如果整个程序应该停止使用sys.exit(),否则只需使用一个空返回。

3
在函数外部使用return语句是行不通的。 - unfa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接