在Python中,有两个名称相似的函数,exit()和sys.exit()。有什么不同,什么时候我应该用一个比另一个?
exit()
sys.exit()
exit是交互式shell的帮助器——sys.exit用于程序中。
exit
sys.exit
site模块(在启动时自动导入,除非给出了-S命令行选项)向内置命名空间(例如exit)添加了几个常量。它们对于交互式解释器shell很有用,不应该在程序中使用。
site
-S
从技术上讲,它们做的基本相同:引发SystemExit。sys.exit在< em > sysmodule.c < / em >中这样做:
SystemExit
static PyObject * sys_exit(PyObject *self, PyObject *args) { PyObject *exit_code = 0; if (!PyArg_UnpackTuple(args, "exit", 0, 1, &exit_code)) return NULL; /* Raise SystemExit so callers may catch it or clean up. */ PyErr_SetObject(PyExc_SystemExit, exit_code); return NULL; }
而exit则分别在site.py和_sitebuiltins.py中定义。
class Quitter(object): def __init__(self, name): self.name = name def __repr__(self): return 'Use %s() or %s to exit' % (self.name, eof) def __call__(self, code=None): # Shells like IDLE catch the SystemExit, but listen when their # stdin wrapper is closed. try: sys.stdin.close() except: pass raise SystemExit(code) __builtin__.quit = Quitter('quit') __builtin__.exit = Quitter('exit')
注意,还有第三个退出选项,即os._exit,它退出时不调用清理处理程序,不刷新stdio缓冲区等(通常只能在fork()之后的子进程中使用)。
fork()
但是在这种情况下sys.exit()更好。它会关闭程序并且不创建任何对话框。
通常情况下,代码会一直运行到最后,程序会自动存在。 有时,我们会要求程序在整个周期运行之前关闭。 一个例子是,当你实现身份验证时,一个用户身份验证失败,在某些情况下,你想退出程序
Python退出。
quit()
< >强用法: 使用内置exit()开箱即用,不需要导入任何库。 只要输入这个:
执行时间:0.03秒
优点:
缺点:
退出Python并引发SystemExit异常(需要导入)。
用法:
import sys sys.exit()
执行时间(仅为导入和sys.exit()): 0.07秒
或者你可以为SystemExit异常使用一条消息:
增加了finally块来说明代码清理子句。灵感来自@Nairum。
finally
import sys try: sys.exit("This is an exit!") except SystemExit as error: print(error) finally: print("Preforming cleanup in 3, 2, 1..") # Do code cleanup on exit
输出:
这是出口! 预成型清理3,2,1 ..
这是出口!
预成型清理3,2,1 ..
try
在代码示例中,我使用的是Python 3.x