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 相关文章推荐
python3.0 字典key排序
Dec 24 Python
Python中文件遍历的两种方法
Jun 16 Python
Python保存MongoDB上的文件到本地的方法
Mar 16 Python
Python爬虫代理IP池实现方法
Jan 05 Python
python编程线性回归代码示例
Dec 07 Python
Python实现的本地文件搜索功能示例【测试可用】
May 30 Python
python numpy 按行归一化的实例
Jan 21 Python
实例详解Matlab 与 Python 的区别
Apr 26 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
Aug 08 Python
django 自定义filter 判断if var in list的例子
Aug 20 Python
django创建超级用户时指定添加其它字段方式
May 14 Python
python中实现栈的三种方法
Dec 19 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
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
详解PHP错误日志的获取方法
2015/07/20 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
javascript if条件判断方法小结
2014/05/17 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
angularJS开发注意事项
2018/05/26 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
Python下线程之间的共享和释放示例
2015/05/04 Python
利用Python破解斗地主残局详解
2017/06/30 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
Python多图片合并PDF的方法
2019/01/03 Python
Python提取频域特征知识点浅析
2019/03/04 Python
Python检测数据类型的方法总结
2019/05/20 Python
python函数不定长参数使用方法解析
2019/12/14 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
Java如何读取CLOB字段
2013/10/10 面试题
办理暂住证介绍信
2014/01/11 职场文书
yy婚礼主持词
2014/03/14 职场文书
《云房子》教学反思
2014/04/20 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
开工典礼策划方案
2014/05/23 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
Python机器学习之KNN近邻算法
2021/05/14 Python
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL