如何终止脚本?

1408 投票
14 回答
2083245 浏览
提问于 2025-04-11 09:19

我想知道怎么提前结束一个脚本,就像PHP里的die()命令那样?

14 个回答

152

另一种方法是:

raise SystemExit
511

想要提前结束一个Python脚本,可以使用内置的 quit() 函数。这种方法不需要导入任何库,既简单又高效。

举个例子:

#do stuff
if this == that:
  quit()
1806
import sys
sys.exit()

以下是来自 sys 模块文档 的一些细节:

sys.exit([arg])

这个命令用于退出 Python 程序。它的实现方式是抛出一个叫做 SystemExit 的异常,这样在程序退出前,使用 try 语句中的 finally 代码块可以正常执行,此外,还可以在外层捕获这个退出尝试。

可选的参数 arg 可以是一个整数,表示退出状态(默认是零),也可以是其他类型的对象。如果是整数,零表示“正常结束”,而任何非零值则被认为是“异常结束”。大多数系统要求这个值在 0 到 127 之间,超出这个范围可能会产生不确定的结果。一些系统会为特定的退出代码分配特定的含义,但这些通常不太完善;比如 Unix 系统一般用 2 表示命令行语法错误,用 1 表示其他类型的错误。如果传入的是其他类型的对象,None 相当于传入零,而其他对象会被打印到 stderr,并且退出代码为 1。特别是,sys.exit("some error message") 是在发生错误时快速退出程序的一种方式。

因为 exit() 最终“只是”抛出一个异常,所以只有在主线程中调用时,它才会退出进程,并且这个异常没有被捕获。

请注意,这是一种“友好”的退出方式。@glyphtwistedmatrix 提到,如果你想要“强制退出”,可以使用 os._exit(*errorcode*),不过这可能在不同操作系统上有所不同(例如,在 Windows 上可能不接受错误代码),而且这种方式不太友好,因为它不会让解释器在进程结束前做任何清理。另一方面,它确实会杀死整个进程,包括所有正在运行的线程,而 sys.exit()(文档中提到)只有在主线程中调用时才会退出,且没有其他线程在运行。

撰写回答