sys.exit() 也可能不会退出程序
2009-06-30 10:08
357 查看
编程就是折腾,这两天把我折腾坏了。原以为 sys.exit() 函数只要执行一定会退出整个程序的,却发现 sys.exit() 并不保证一定退出程序。大概是一个这样的程序:
原本的意图是发生了预定的状态则退出程序,但是程序执行了 sys.exit() 后却没有正常退出,而是仅退出了 t.run,却继续执行 main 函数的余下循环。
查文档,发现 sys.exit() 函数其实是返回一个 SystemExit
异常,因为 main 函数里的 try 语句屏蔽了异常,所以程序没有退出,而是继续执行下面的语句。如果要立即退出程序可以删掉 main 函数里的try语句,或在 main 函数里加一个 SystemExit
异常的处理,程序就可以退出了。
import sys class test: def __init__(self): print 'begin' def run(self, i): print i if i == 5: sys.exit() def main(): t = test() for i in range(10): try: t.run(i) except SystemExit: return except: pass if __name__ == '__main__': main()
原本的意图是发生了预定的状态则退出程序,但是程序执行了 sys.exit() 后却没有正常退出,而是仅退出了 t.run,却继续执行 main 函数的余下循环。
查文档,发现 sys.exit() 函数其实是返回一个 SystemExit
异常,因为 main 函数里的 try 语句屏蔽了异常,所以程序没有退出,而是继续执行下面的语句。如果要立即退出程序可以删掉 main 函数里的try语句,或在 main 函数里加一个 SystemExit
异常的处理,程序就可以退出了。
相关文章推荐
- Python程序退出: os._exit()和sys.exit()
- python 退出程序sys.exit 的退出码
- Python程序退出方式(sys.exit() os._exit() os.kill() os.popen(...))
- python程序退出方式[sys.exit() os._exit() os.kill() os.popen(...)]
- android开发两种退出程序方式(killProcess,System.exit)
- exit--进程退出;wait--进程等待;execl--执行程序
- C# 强制退出WinForm程序之Application.Exit和Environment.Eixt
- 〖Linux〗以后台方式启动/结束指定程序/命令(不受 exit 或点击窗口关闭按钮等终端退出操作的影响)
- os.waitpid()无法获取sys.exit()退出时的status code
- ABAP 程序中退出操作(CHECK, EXIT, RETURN, LEAVE PROGRAM...)
- Bash的function中exit不退出程序
- android开发两种退出程序方式(killProcess,System.exit)
- C# 强制退出WinForm程序之Application.Exit和Environment.Eixt
- 程序退出函数---exit,_exit,_Exit,abrot
- 强制退出WinForm程序之Application.Exit和Environment.Eixt
- 为什么状态栏上的GPS图标在GPS程序退出后不会自动消失
- 强制退出WinForm程序之Application.Exit和Environment.Eixt
- 强制退出WinForm程序之Application.Exit和Environment.Eixt
- android开发两种退出程序方式(killProcess,System.exit) 分类: Android Activity 2014-06-13 17:28 84人阅读 评论(0) 收藏
- 程序中的退出键与事件EEikCmdExit