python 中exit,sys.exit,os._exit用法
2019-08-05 本文已影响0人
tafanfly
exit
exit() 可以退出某个程序,余下语句不执行
,而其中的数字参数则用来表示程序是否是碰到错误而中断。
- exit(1) 表示程序错误退出
- exit(0) 表示程序正常退出
test.py:
#!/usr/bin/env python
# coding=utf-8
def test():
print 'start test'
#exit(0)
print 'end test'
def test1():
print 'start test2'
try:
err
except:
print 'Error'
exit(1)
print 'end test2'
if __name__ == "__main__":
test()
test1()
test.sh:
#!/bin/bash
python test.py
echo 'The exit status of above command is '$?
echo 'Finally'
当test.py脚本中exit(0)没有注释
时, 运行test.sh脚本, 可以知道一) exit(0)退出了程序,后面的语句不执行;二)python脚本是正常退出,退出状态为0。
$ sh test.sh
start test
The exit status of above command is 0
Finally
当test.py脚本中exit(0)有注释
时, 运行test.sh脚本, 可以知道一) exit(1)退出了程序,后面的语句不执行;二)python脚本是异常退出,退出状态为1。
$ sh test.sh
start test
end test
start test2
Error
The exit status of above command is 1
Finally
注意
: 无论是exit(0) 还是 exit(1), 这个都是由人为判断去如何使用才恰当的。0的话只是告诉你正常退出, 1是告诉你发生了未知错误才退出的。
sys.exit
sys.exit() 可以退出某个程序,余下语句不执行
,而其中的数字参数则用来表示程序是否是碰到错误而中断。功能和exit()
基本类似, 都能抛出异常:
sys.exit()会引发一个异常:SystemExit
,如果这个异常没有被捕获,那么python解释器将会退出。如果有捕获此异常的代码,那么余下代码还是会执行。
#!/usr/bin/env python
# coding=utf-8
import sys
def test():
print 'start test'
try:
sys.exit(0)
except SystemExit:
print 'continue'
finally:
print 'end test'
# $ python test.py
start test
continue
end test
注意
:0为正常退出,其他数值(1-127)为不正常。一般用于在主线程中退出。
os._exit
直接将python程序终止,之后的所有代码都不会继续执行, 且不会有异常抛出。
#!/usr/bin/env python
# coding=utf-8
import os
import sys
def test():
print 'start test'
try:
os._exit(0)
except Exception:
print 'continue'
finally:
print 'end test'
# $ python test.py
start test
注意
:0为正常退出,其他数值(1-127)为不正常。一般os._exit() 用于在线程中退出。
总结
- exit()一般在交互式shell中退出时使用
- sys.exit()的退出比较优雅,调用后会引发SystemExit异常,可以捕获此异常做清理工作。一般用于在主线程中退出。
- os._exit()直接将python解释器退出,余下的语句不会执行, 不会抛出异常。一般用于在线程中退出 。