在Python中,有两个名称相似的函数,exit()和sys.exit()。有什么不同,什么时候我应该用一个比另一个?
当前回答
解决方案,起源,差异和速度
为什么我们需要exit() / sys.exit()命令吗?
通常情况下,代码会一直运行到最后,程序会自动存在。 有时,我们会要求程序在整个周期运行之前关闭。 例如,当您实现身份验证而用户身份验证失败时,在某些情况下您希望退出程序。
exit ()
Python退出。
也许你不知道这一点,但它是quit()的同义词,在quit()之后添加,以使python更加用户友好。 设计用于使用交互式shell。
用法: 就像开箱即用一样使用内置的exit(),不需要导入任何库。 只要输入这个:
exit()
执行时间:0.03秒
优点:
使用速度更快(内置) 适用于python 2。X和python 3.x 快 可以像sys.exit()一样使用(有例外)
缺点:
无异常消息
sys.exit ()
退出Python并引发SystemExit异常(需要导入)。 设计用于程序内部工作。
用法:
import sys
sys.exit()
执行时间(仅为import和sys.exit()): 0.07秒
或者你可以为SystemExit异常使用一条消息:
最后增加了块说明代码清理子句。灵感来自@Nairum。
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 ..
优点:
触发SystemExit异常 您可以使用异常消息 关闭时没有对话框 最后运用尝试条款 适用于python 2。X和python 3.x
缺点:
需要导入 比exit()慢57.1%
结论:
如果你不需要一个带有可选消息的异常,那么使用exit(),这是更快和内置的。 如果需要带有可选消息的异常的更多功能,请使用sys.exit()。
在代码示例中,我使用的是Python 3.x
其他回答
Exit是交互式shell - sys的一个助手。Exit用于程序中。
site模块(在启动时自动导入,除非给出了-S命令行选项)将几个常量添加到内置命名空间(例如exit)。它们对于交互式解释器shell很有用,不应该在程序中使用。
从技术上讲,它们的功能基本相同:提升SystemExit。sys。Exit在sysmodule.c中这样做:
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和_sitebuiltin .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()之后的子进程中使用)。
如果我在代码中使用exit()并在shell中运行它,它会显示一条消息,询问我是否要终止程序。真让人不安。 在这里看到的
但是sys.exit()在这种情况下更好。它会关闭程序并且不创建任何对话框。
解决方案,起源,差异和速度
为什么我们需要exit() / sys.exit()命令吗?
通常情况下,代码会一直运行到最后,程序会自动存在。 有时,我们会要求程序在整个周期运行之前关闭。 例如,当您实现身份验证而用户身份验证失败时,在某些情况下您希望退出程序。
exit ()
Python退出。
也许你不知道这一点,但它是quit()的同义词,在quit()之后添加,以使python更加用户友好。 设计用于使用交互式shell。
用法: 就像开箱即用一样使用内置的exit(),不需要导入任何库。 只要输入这个:
exit()
执行时间:0.03秒
优点:
使用速度更快(内置) 适用于python 2。X和python 3.x 快 可以像sys.exit()一样使用(有例外)
缺点:
无异常消息
sys.exit ()
退出Python并引发SystemExit异常(需要导入)。 设计用于程序内部工作。
用法:
import sys
sys.exit()
执行时间(仅为import和sys.exit()): 0.07秒
或者你可以为SystemExit异常使用一条消息:
最后增加了块说明代码清理子句。灵感来自@Nairum。
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 ..
优点:
触发SystemExit异常 您可以使用异常消息 关闭时没有对话框 最后运用尝试条款 适用于python 2。X和python 3.x
缺点:
需要导入 比exit()慢57.1%
结论:
如果你不需要一个带有可选消息的异常,那么使用exit(),这是更快和内置的。 如果需要带有可选消息的异常的更多功能,请使用sys.exit()。
在代码示例中,我使用的是Python 3.x
推荐文章
- 如何从Python函数中返回两个值?
- 前一个月的Python日期
- Python中方括号括起来的列表和圆括号括起来的列表有什么区别?
- Python日志记录不输出任何东西
- 每n秒运行特定代码
- SQLAlchemy是否有与Django的get_or_create等价的函数?
- 如何将python datetime转换为字符串,具有可读格式的日期?
- 美丽的汤和提取div及其内容的ID
- 在Python中重置生成器对象
- 用Python构建最小的插件架构
- model.eval()在pytorch中做什么?
- Tensorflow 2.0:模块“Tensorflow”没有属性“Session”
- 从环境文件中读入环境变量
- 在OSX 10.11中安装Scrapy时,“OSError: [Errno 1]操作不允许”(El Capitan)(系统完整性保护)
- 如何删除熊猫数据帧的最后一行数据