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当中的字符串和编码
Apr 25 Python
在Python中使用swapCase()方法转换大小写的教程
May 20 Python
Django中ORM表的创建和增删改查方法示例
Nov 15 Python
python实现合并两个排序的链表
Mar 03 Python
如何用Python来搭建一个简单的推荐系统
Aug 07 Python
使用python实现unix2dos和dos2unix命令的例子
Aug 13 Python
Python下利用BeautifulSoup解析HTML的实现
Jan 17 Python
Python拼接字符串的7种方式详解
Mar 19 Python
pyspark给dataframe增加新的一列的实现示例
Apr 24 Python
使用Keras预训练模型ResNet50进行图像分类方式
May 23 Python
如何使用Pytorch搭建模型
Oct 26 Python
python 实现Requests发送带cookies的请求
Feb 08 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
jQuery 浮动广告实现代码
2008/12/25 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
javascript基础语法学习笔记
2016/01/04 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
9102了,你还不会移动端真机调试吗
2019/03/25 Javascript
Vue实现简易计算器
2020/02/25 Javascript
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
python网页请求urllib2模块简单封装代码
2014/02/07 Python
Python从MP3文件获取id3的方法
2015/06/15 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
Jupyter 无法下载文件夹如何实现曲线救国
2020/04/22 Python
教你如何用python操作摄像头以及对视频流的处理
2020/10/12 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
设计毕业生简历中的自我评价
2013/10/01 职场文书
签约仪式主持词
2014/03/19 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
浅谈vue2的$refs在vue3组合式API中的替代方法
2021/04/18 Vue.js
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android