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实现倒计时的示例
Feb 14 Python
简单的抓取淘宝图片的Python爬虫
Dec 25 Python
Python之父谈Python的未来形式
Jul 01 Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 Python
Python升级导致yum、pip报错的解决方法
Sep 06 Python
python如何使用unittest测试接口
Apr 04 Python
Python根据已知邻接矩阵绘制无向图操作示例
Jun 23 Python
Python 实现微信防撤回功能
Apr 29 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
Python: glob匹配文件的操作
Dec 11 Python
python实现股票历史数据可视化分析案例
Jun 10 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中对用户身份认证实现两种方法
2011/06/04 PHP
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
php cookie名使用点号(句号)会被转换
2014/10/23 PHP
php 删除cookie方法详解
2014/12/01 PHP
php微信开发之谷歌测距
2018/06/14 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
jQuery点击后一组图片左右滑动的实现代码
2012/08/16 Javascript
JS 实现导航栏悬停效果
2013/09/23 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
jquery文档操作wrap()方法实例简述
2015/01/10 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
python字符串排序方法
2014/08/29 Python
Python中线程编程之threading模块的使用详解
2015/06/23 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
Python元组常见操作示例
2019/02/19 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
python numpy数组复制使用实例解析
2020/01/10 Python
python时间日期操作方法实例小结
2020/02/06 Python
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
房地产管理毕业生自荐信
2013/11/04 职场文书
给朋友的道歉信
2014/01/09 职场文书
社区交通安全实施方案
2014/03/22 职场文书
新年团拜会主持词
2014/04/02 职场文书
力学专业求职信
2014/07/23 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
生活小常识广播稿
2015/08/19 职场文书
2015年幼师个人工作总结
2015/10/15 职场文书