python 的exit,return,sys.exit()等的区别与使用方法
来源:互联网 发布:无硅油洗发水 知乎 编辑:程序博客网 时间:2024/05/17 21:55
有这样一道题目: 字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来帮你.
我最初的代码是:
- #!/usr/bin/env python
- import string
- import keyword
- import sys
- #Get all keyword for python
- #keyword.kwlist
- #['and', 'as', 'assert', 'break', ...]
- keyWords = keyword.kwlist
- #Get all character for identifier
- #string.letters ==> 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
- #string.digits ==> '0123456789'
- charForId = string.letters + "_"
- numForId = string.digits
- idInput = raw_input("Input your words,please!")
- if idInput in keyWords:
- print "%s is keyword fot Python!" % idInput
- else:
- lenNum = len(idInput)
- if(1 == lenNum):
- if(idInput in charForId and idInput != "_"):
- print "%s is legal identifier for Python!" % idInput
- else:
- #It's just "_"
- print "%s isn't legal identifier for Python!" % idInput
- else:
- if(idInput[0:1] in charForId):
- legalstring = charForId + numForId
- for item in idInput[1:]:
- if (item not in legalstring):
- print "%s isn't legal identifier for Python!" % idInput
- sys.exit(0)
- print "%s is legal identifier for Python!2" % idInput
- else:
- print "%s isn't legal identifier for Python!3" % idInput
代码完毕后,我测试每一条分支,测试到分支时,必须输入_d4%等包含非法字符的标识符才能进行测试,我最初以为,sys.exit(0)---正常退出脚本,sys.exit(1)非正常退出脚本,但是实际情况是/9sys.exit(1),仅输出返回码不同):
- if (item not in legalstring):
- print "%s isn't legal identifier for Python!" % idInput
- sys.exit(0)
- Input your words,please!_d4%
- _d4% isn't legal identifier for Python!
- Traceback (most recent call last):
- File "E:/python/idcheck.py", line 37, in <module>
- sys.exit(0)
- SystemExit: 0
- >>>
由此可见,这样做没有达到我预期如下输出的效果,那么,问题在哪里呢?在于sys.exit()始终会抛出一个SystemExit异常。
- Input your words,please!_d4%
- _d4% isn't legal identifier for Python!
- #!/usr/bin/env python
- import string
- import keyword
- import sys
- import traceback
- try:
- #Get all keyword for python
- #keyword.kwlist
- #['and', 'as', 'assert', 'break', ...]
- keyWords = keyword.kwlist
- #Get all character for identifier
- #string.letters ==> 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
- #string.digits ==> '0123456789'
- charForId = string.letters + "_"
- numForId = string.digits
- idInput = raw_input("Input your words,please!")
- if idInput in keyWords:
- print "%s is keyword fot Python!" % idInput
- else:
- lenNum = len(idInput)
- if(1 == lenNum):
- if(idInput in charForId and idInput != "_"):
- print "%s is legal identifier for Python!" % idInput
- else:
- #It's just "_"
- print "%s isn't legal identifier for Python!" % idInput
- else:
- if(idInput[0:1] in charForId):
- legalstring = charForId + numForId
- for item in idInput[1:]:
- if (item not in legalstring):
- print "%s isn't legal identifier for Python!" % idInput
- sys.exit()
- print "%s is legal identifier for Python!2" % idInput
- else:
- print "%s isn't legal identifier for Python!3" % idInput
- except SystemExit:
- pass
- except:
- traceback.print_exc()
上面的代码获取sys.exit()抛出的SystemExit异常。
return:在定义函数时从函数中返回一个函数的返回值,终止函数的执行。
exit:下面的代码中,如果把sys.exit()替换成exit,则exit仅仅跳出离它最近的for循环, print "%s is legal identifier for Python!2" % idInput语句会被输出,这里,exit的作用类似于break. 但实际上break和exit作用并不同
- for item in idInput[1:]:
- if (item not in legalstring):
- print "%s isn't legal identifier for Python!" % idInput
- sys.exit()
- print "%s is legal identifier for Python!2" % idInput
0 0
- python 的exit,return,sys.exit()等的区别与使用方法
- python中,exit,return,sys.exit()等的区别与使用方法
- python sys.exit()、break、 exit()、quit()、os._exit()、return的区别
- exit 与 return 的区别
- return与exit的区别
- exit与return的区别
- exit 与 return 的区别!
- exit与return的区别
- exit 与return 的区别
- exit 与 return 的区别
- return与exit的区别
- exit与return的区别
- exit与return的区别
- return与exit()的区别
- python 中 os._exit(), sys.exit(), exit() 的区别是什么?
- exit()函数详解与Exit() 和 Return() 的区别
- exit()函数详解与Exit() 和 Return() 的区别
- exit()函数详解与Exit() 和 Return() 的区别
- OpenGL基础图形编程(七)建模
- android textview xml 属性设置
- 剑指offer系列之10:数值的整次方
- Xcode上新建工程,将Single View Application模板的工程修改为Empty Application模板的工程
- mysql基础
- python 的exit,return,sys.exit()等的区别与使用方法
- C++指针数组、数组指针、数组名及二维数组技巧汇总
- iTOP-4418嵌入式开发板接口基本介绍
- Android API Guides---Common Intents
- VMware 11安装OS X 10.10全过程(一)
- 数据结构 - Trie树(字典树)
- 码农小汪-spring框架学习之5-spring Container Extension Points 容器扩展点
- 12、MongoDB的副本集( ReplSet )集群
- 如何配置android的adb环境变量