Python学习系列之exit语句

一、定义

1.1 exit()

exit():结束整个程序。

       在python中运行一段代码,如果在某处已经完成整次任务,可以用exit退出整个运行。并且还可以在exit()的括号里加入自己退出程序打印说明。不过注意在py3中要加单引号或双引号。

1.2 os._exit() vs sys.exit() vs exit()

python的程序有多种退出方式:os._exit(), sys.exit(),exit()/quit()。

1.2.1 sys.exit()

Help on built-in function exit in module sys:在模块sys中,可以帮助内置函数退出的。

一般是退出Python程序的首选方法。该方法中包含一个参数status,默认为0,表示正常退出, 其他都是异常退出。

sys.exit()会引发一个异常:SystemExit,这是唯一一个不会被认为是错误的异常

如果这个异常没有被捕获,那么python解释器将会退出。如果有捕获此异常的代码,那么这些代码还是会执行。捕获这个异常可以做一些额外的清理工作。n默认值为0,0为正常退出其他数值(1-127)为不正常,可抛异常事件供捕获。一般主程序中使用此退出。

SystemExit 并不派生自Exception 所以用Exception捕捉不到该SystemEixt异常,应该使用SystemExit来捕捉。

1.2.2 os._exit()

os._exit() 会直接将python程序终止,之后的所有代码都不会继续执行。退出 Python 解释器,不抛异常, 不执行相关清理工作,其后的代码都不执行。其使用会受到平台的限制,但我们常用的Win32平台和基于UNIX的平台不会有所影响, 常用在子进程的退出。一般来说os._exit() 用于在线程中退出,sys.exit() 用于在主线程中退出。

os._exit() 调用 C 语言的 _exit() 函数。

1.2.3 exit()/quit()

exit()/quit(),抛出SystemExit异常,类似于sys.exit()。一般在交互式shell中退出时使用。

1.2.4 区别

综上,sys.exit()的退出比较优雅,调用后会引发SystemExit异常,可以捕获此异常做清理工作。os._exit()直接将python解释器退出,余下的语句不会执行。

  • 一般在fork出来的子进程中使用os._exit(),os._exit() 用于在子进程,线程中退出 。
  • sys.exit() 用于在主线程中退出。

1.2.5 exit()与sys.exit()

exit() 跟 C 语言等其他语言的 exit() 应该是一样的。 

一开始觉得exit()sys.exit()用法完全一样,是不是一个函数,后来在stackoverflow中看到一个答案也不知道对不对,先这样理解吧:

exit is a helper for the interactive shell - sys.exit is intended for use in programs.

The site module (which is imported automatically during startup, except if the -S command-line option is given) adds several constants to the built-in namespace (e.g. exit)They are useful for the interactive interpreter shell and should not be used in programs

exit is defined in site.py and _sitebuiltins.py,sys.exit does so in sysmodule.c 

        也就是说exit是用于用户交互式shell,而sys.exit才是内部编码使用的。site是自动导入的模块,类似于lang包,里面有一些可以直接用的函数比如exit,但多用于交互式的shell,而不应该用于编码中。

builtin.exit 是一个 Quitter 对象,这个对象的 call 方法会抛出一个 SystemExit 异常。

1.3 exit(0)和exit(1)

exit(0) 在很多类型的操作系统里,exit(0) 可以中断某个程序,而其中的数字参数则用来表示程序是否是碰到错误而中断。

exit(1) 表示发生了错误;exit(0) 则表示程序是正常退出的。
退出代码是告诉解释器的(或操作系统)。实际运用中可以使用任何整型数据,表示不同的自定义错误类型。

二、总结

Python学习系列之exit语句_第1张图片

 

你可能感兴趣的:(Python)