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中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
Python中使用插入排序算法的简单分析与代码示例
May 04 Python
Python字符串和字典相关操作的实例详解
Sep 23 Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
Python模拟登录的多种方法(四种)
Jun 01 Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 Python
解决sublime+python3无法输出中文的问题
Dec 12 Python
python处理“
Jun 10 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
Dec 31 Python
sklearn和keras的数据切分与交叉验证的实例详解
Jun 19 Python
Python使用tkinter实现摇骰子小游戏功能的代码
Jul 02 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 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 数组排序方法总结 推荐收藏
2010/06/30 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
php结合正则获取字符串中数字
2015/06/19 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
详解JavaScript的内置对象
2016/12/07 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
wxPython窗口中文乱码解决方法
2014/10/11 Python
Python 搭建Web站点之Web服务器与Web框架
2016/11/06 Python
Django自定义分页效果
2017/06/27 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
Python ORM编程基础示例
2020/02/02 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
社会实践先进工作者事迹材料
2014/05/06 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
《我们的民族小学》教学反思
2016/02/19 职场文书