![]()
概述
Python程序有两种退出方式:
import os
os._exit()
import sys
sys.exit()
- 1
- 2
- 3
- 4
os._exit() 本身不抛出异常,直接将python程序终止退出,之后的所有代码都不会执行。os._exit(n)退出的机制是调用 C 语言的 _exit() 函数。__builtin__.exit 是一个 Quitter 对象,这个对象的 __call__ 方法会抛出一个 SystemExit 异常。常用在子线程的停止中。
sys.exit() 会抛出一个异常: SystemExit,异常也是对象,所有异常都是基类Exception的成员。python的异常名称放在内建命名空间中,所以不必导入exception模块。如果这个异常没有被捕获,那么python解释器将会退出。如果有捕获该异常的代码,那么这些代码还是会执行。sys.exit(n)一般在交互式shell中退出时用到;n默认0,正常退出,可以捕获异常执行些清理工作。其他数值(1-127)为不正常,可抛异常事件供捕获。
一般来说os._exit() 用于在线程中退出。
sys.exit() 用于在主线程中退出。
举个例子
import os
try:
os._exit(0)
except:
print('Program is dead.')
- 1
- 2
- 3
- 4
- 5
这个print是不会打印的,因为没有异常被捕获。
![]()
import sys
try:
sys.exit(0)
except:
print('Program is dead.')
finally:
print('clean-up')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
这里两个print都可以打印,因为sys.exit()抛出了异常。
![]()
结论
使用sys.exit()来退出程序比较优雅,调用它能引发SystemExit异常,然后我们可以捕获这个异常做些清理工作。而os._exit()将python解释器直接退出,后面的语句都不会执行。
一般情况下用sys.exit()就行;os._exit()可以在os.fork()产生的子进程里使用。
参考:
文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树基本技能操作系统和环境416632 人正在系统学习中
评论记录:
回复评论: