Python中exit、return、sys.exit()等使用实例和区别


Posted in Python onMay 28, 2015

有这样一道题目:  字符串标识符.修改例 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
Python 相关文章推荐
学习python (1)
Oct 31 Python
python实现数通设备端口监控示例
Apr 02 Python
Python简单日志处理类分享
Feb 14 Python
wxpython中自定义事件的实现与使用方法分析
Jul 21 Python
安装Python和pygame及相应的环境变量配置(图文教程)
Jun 04 Python
python实现感知器
Dec 19 Python
Python matplotlib以日期为x轴作图代码实例
Nov 22 Python
python 命名规范知识点汇总
Feb 14 Python
使用Django搭建网站实现商品分页功能
May 22 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
Sep 16 Python
用python写PDF转换器的实现
Oct 29 Python
Python中的with...as用法介绍
May 28 #Python
python关键字and和or用法实例
May 28 #Python
Python yield 使用浅析
May 28 #Python
Python中super的用法实例
May 28 #Python
Python中的super用法详解
May 28 #Python
Python读写ini文件的方法
May 28 #Python
Python实现给文件添加内容及得到文件信息的方法
May 28 #Python
You might like
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
JavaScript阻止表单提交方法(附代码)
2017/08/15 Javascript
Node.JS中快速扫描端口并发现局域网内的Web服务器地址(80)
2017/09/18 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
JavaScript中的this基本问题实例小结
2020/03/09 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
python3中int(整型)的使用教程
2017/03/23 Python
python 容器总结整理
2017/04/04 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
英文简历中的自我评价
2013/10/06 职场文书
党员批评与自我批评
2014/02/12 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
小学体育组工作总结2015
2015/07/21 职场文书
员工升职自我评价
2019/03/26 职场文书
MySQL 重写查询语句的三种策略
2021/05/10 MySQL
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python
Java数据结构之链表相关知识总结
2021/06/18 Java/Android