python 中exit,sys.exit,os._exit用法

2019-08-05  本文已影响0人  tafanfly

exit

exit() 可以退出某个程序,余下语句不执行,而其中的数字参数则用来表示程序是否是碰到错误而中断。

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() 用于在线程中退出。

总结

上一篇下一篇

猜你喜欢

热点阅读