python sys.exit()、break、 exit()、quit()、os._exit()、return的区别

1.sys.exit()
函数说明:
标准的退出系统的方法。
exit([status])
退出系统,并抛出SystemExit(status)异常。
如果不传递status或传递None,默认当做0处理。
如果传递的status为数字,会被认为是系统的退出码。
如果传递的status为其他数据类型,status会被打印出来,并且系统的退出码为1.

如果不同try…except….捕获异常,并用traceback跟踪,sys.exit()方法抛出的异常是不会被发现的。但是需要注意,用try…except….抛出异常后,就不会退出系统了,会继续执行后面的语句。所以,想要退出系统时,不可以将sys.exit()方法放入ry…except….中

(1) 这三种方式sys.exit()、sys.exit(0)、sys.exit(None)意义相同,不返回退出码

import sys
import traceback
def test():
    print "test in"
    sys.exit()
    print "test out"
try:
    test()
except Exception as e:
    print e
    traceback.print_exc()
print "ending"

此种情况下只会输出:

test in

原因是sys.exit()方法抛出的异常不属于Exception类,所以不能打印异常信息。如果需要跟踪异常,并打印异常信息,我们需要修改捕获异常的方式,代码如下:

import sys
import traceback
def test():
    print "test in"
    sys.exit()
    print "test out"
try:
    test()
except:
    traceback.print_exc()
print "ending"

输出结果为:

Traceback (most recent call last):
  File "E:\python_program\Test_python2_7\src\exit.py", line 16, in 
test in
    test()
  File "E:\python_program\Test_python2_7\src\exit.py", line 13, in test
    sys.exit()
SystemExit
ending

(2) 参数为大于0的数字时, sys.exit(n)

import sys
import traceback
def test():
    print "test in"
    sys.exit(11111111)
    print "test out"
try:
    test()
except:
    traceback.print_exc()
print "ending"

输出结果中会带有传递的数字,将其作为退出码:

Traceback (most recent call last):
  File "E:\python_program\Test_python2_7\src\exit.py", line 15, in 
test in
ending
    test()
  File "E:\python_program\Test_python2_7\src\exit.py", line 12, in test
    sys.exit(11111111)
SystemExit: 11111111

(3) 参数其他数据类型时,包括dict、list、set、str等,sys.exit(other_type)
输出结果如下:

SystemExit: {'key': 'value'}
或者
SystemExit: ['value1', 'value2']
或者
SystemExit: set(['value2', 'value1'])
或者
SystemExit: string

2.os._exit(n)方法
使用环境:该方法可以用在Unix, Windows系统中。
作用:退出进程时不调用清理处理器,也不清洗stdio缓冲区,退出码为n。
Note
退出系统的标准方法是sys.exit(n)。_exit() 在通常情况下被用在退出子进程。
该方法不会抛出异常,直接退出系统。

3.exit()和quit()方法
quit([code=None])
exit([code=None])
主要用于退出交互式解释器shell,不应该被用在程序中,但也可以用于程序中。
用在程序中,如果为其捕获异常,也可以抛出SystemExit异常和退出码。不捕获则直接退出。与sys.exit()不同的是,exit(0)的退出码为0,而sys.exit(0)不输出退出码。
4.break
跳出最近的一层循环
5.return
跳出函数,并返回结果

你可能感兴趣的:(python相关知识)