为何要用sys.exit()退出?

2019年9月2日 / 276次阅读 / Last Modified 2019年9月2日

Python有3个不同的退出程序的函数,exit(),quit()和本文要介绍的sys.exit()。exit()和quit()是一样的,sys.exit()与前两者有点区别。

exit和quit函数

这两个函数的作用,就是直接退出程序,可以带一个参数作为程序的返回码,如果不带参数,默认就是返回0.

xinlin@ubuntu:~/test$ python3 -q
>>> exit(111)
xinlin@ubuntu:~/test$ echo $?
111
xinlin@ubuntu:~/test$ python3 -q
>>> quit(222)
xinlin@ubuntu:~/test$ echo $?
222
xinlin@ubuntu:~/test$ python3 -q
>>> exit()
xinlin@ubuntu:~/test$ echo $?
0
xinlin@ubuntu:~/test$ python3 -q
>>> quit()
xinlin@ubuntu:~/test$ echo $?
0

sys.exit()函数

sys模块的exit函数,与exit和quit函数不同的地方在于,sys.exit()函数会抛出一个SystemExit异常,Python代码可以捕获这个异常来进行一些程序退出前的清理工作。sys.exit函数同样可以带一个参数来作为程序的退出码,默认是0.

>>> import sys
>>> try:
...     sys.exit(101)
... except SystemExit as e:
...     print(repr(e))
...     print(str(e))
...
SystemExit(101)
101
>>>

看起来使用str()函数在except分支获取返回码,比较判断不同的返回码,并做响应的清理动作,是比较方便的(str与repr的区别)。另外一个细节,上面这段代码在Python解释器中执行,因为异常被捕获,所以不会导致解释器退出!

捕获了sys.exit()函数抛出的异常,处理之后,还要程序继续退出,就需要直接使用exit或quit函数。实践中,完整的使用sys.exit函数的逻辑应该是如下这样的代码:

import sys

def main():
    sys.exit(123)
    return

if __name__ == '__main__':
    try:
        main()
    except SystemExit as e:
        if str(e) == '123':
            print('---123---')
            exit(123)

使用sys.exit函数退出程序,可以有个异常捕获机制来做清理扫尾的工作,程序会更加灵活健壮。

-- EOF --

本文链接:https://www.pynote.net/archives/1036

相关文章

    留言区

    电子邮件地址不会被公开。 必填项已用*标注


    前一篇:
    后一篇:

    More

    麦新杰的Python笔记

    Ctrl+D 收藏本页


    ©Copyright 麦新杰 Since 2019 Python笔记

    go to top