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使用urllib模块的urlopen超时问题解决方法
Nov 08 Python
python3 读写文件换行符的方法
Apr 09 Python
Sanic框架请求与响应实例分析
Jul 16 Python
python如何实现异步调用函数执行
Jul 08 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
python输出带颜色字体实例方法
Sep 01 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
python 实现从高分辨图像上抠取图像块
Jan 02 Python
Python文本文件的合并操作方法代码实例
Mar 31 Python
python中二分查找法的实现方法
Dec 06 Python
细说NumPy数组的四种乘法的使用
Dec 18 Python
详解Python牛顿插值法
May 11 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/10/08 PHP
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
vue this.reload 方法 配置
2018/09/12 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
跟老齐学Python之编写类之二方法
2014/10/11 Python
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
Python简单读取json文件功能示例
2017/11/30 Python
基于Python List的赋值方法
2018/06/23 Python
Python global全局变量函数详解
2018/09/18 Python
基于Python爬取51cto博客页面信息过程解析
2020/08/25 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
大四自我鉴定范文
2013/10/06 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
三分钟演讲稿事例
2014/03/03 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js