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  __getattr__与__setattr__使用方法
Sep 06 Python
Python多线程下载文件的方法
Jul 10 Python
python实现判断数组是否包含指定元素的方法
Jul 15 Python
Python编程判断一个正整数是否为素数的方法
Apr 14 Python
python下载图片实现方法(超简单)
Jul 21 Python
python初学之用户登录的实现过程(实例讲解)
Dec 23 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
python调用xlsxwriter创建xlsx的方法
May 03 Python
python爬取微信公众号文章
Aug 31 Python
python实现爬山算法的思路详解
Apr 09 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
Feb 20 Python
asyncio异步编程之Task对象详解
Mar 13 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
Protoss魔法科技
2020/03/14 星际争霸
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
javascript第一课
2007/02/27 Javascript
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
JQuery实现图片轮播效果
2015/09/15 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
微信小程序图表插件(wx-charts)实例代码
2017/01/17 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
js 索引下标之li集合绑定点击事件
2018/01/12 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
VueCli生产环境打包部署跨域失败的解决
2020/11/13 Javascript
javascript this指向相关问题及改变方法
2020/11/19 Javascript
Python文本特征抽取与向量化算法学习
2017/12/22 Python
Python3处理HTTP请求的实例
2018/05/10 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
自定义django admin model表单提交的例子
2019/08/23 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
股票投资建议书
2014/05/19 职场文书
行政二审代理词
2015/05/25 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang
Python实战之OpenCV实现猫脸检测
2021/06/26 Python
python not运算符的实例用法
2021/06/30 Python
python中urllib包的网络请求教程
2022/04/19 Python