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模块简介之有序字典(OrderedDict)
Dec 01 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 Python
使用Python实现博客上进行自动翻页
Aug 23 Python
Python科学画图代码分享
Nov 29 Python
tensorflow中next_batch的具体使用
Feb 02 Python
想学python 这5本书籍你必看!
Dec 11 Python
Python3安装Pillow与PIL的方法
Apr 03 Python
Pytorch中.new()的作用详解
Feb 18 Python
Python使用monkey.patch_all()解决协程阻塞问题
Apr 15 Python
Python垃圾回收机制三种实现方法
Apr 27 Python
python中执行smtplib失败的处理方法
Jul 01 Python
python性能测试工具locust的使用
Dec 28 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脚本的10个技巧(6)
2006/10/09 PHP
PHP动态创建Web站点的方法
2011/08/14 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
jQuery实现带动画效果的二级下拉导航方法
2015/03/11 Javascript
bootstrap布局中input输入框右侧图标点击功能
2016/05/16 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
Python读取表格类型文件代码实例
2020/02/17 Python
基于python+selenium自动健康打卡的实现代码
2021/01/13 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
如何开启linux的ssh服务
2015/02/14 面试题
内科护士实习自我鉴定
2013/10/17 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
群众路线对照检查材料
2014/09/22 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
Python实战之实现简易的学生选课系统
2021/05/25 Python
使用python绘制横竖条形图
2022/04/21 Python