Python中exit、return、sys.exit()等使用实例和区别

 更新时间:2015年05月28日 17:47:12   投稿:junjie  
这篇文章主要介绍了Python中exit、return、sys.exit()等使用实例和区别,本文是一个实际项目中的总结,需要的朋友可以参考下

有这样一道题目:  字符串标识符.修改例 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将图片批量从png格式转换至WebP格式

    Python将图片批量从png格式转换至WebP格式

    最近因为工作需要去研究了下png的压缩,发现转换成webp格式可以小很多,下面给大家分享利用Python将图片批量从png格式转换至WebP格式的方法,下面来一起看看。
    2016-08-08
  • python 读写excel文件操作示例【附源码下载】

    python 读写excel文件操作示例【附源码下载】

    这篇文章主要介绍了python 读写excel文件操作,结合实例形式分析了Python基于xlutils导入xlrd,xlwt库操作Excel相关实现技巧,并附带源码供读者下载参考,需要的朋友可以参考下
    2019-06-06
  • Django 如何实现文件上传下载

    Django 如何实现文件上传下载

    这篇文章主要介绍了Django 如何实现文件上传下载,帮助大家更好的理解和学习使用Django框架,感兴趣的朋友可以了解下
    2021-04-04
  • Python+Django实现简单HelloWord网页的示例代码

    Python+Django实现简单HelloWord网页的示例代码

    本文主要介绍了Python+Django实现简单HelloWord网页的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • python实现简单的计时器功能函数

    python实现简单的计时器功能函数

    这篇文章主要介绍了python实现简单的计时器功能函数,涉及Python操作时间的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Python+腾讯云服务器实现每日自动健康打卡

    Python+腾讯云服务器实现每日自动健康打卡

    本文主要介绍了通过Python+腾讯云服务器实现每日自动健康打卡,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • 设置jupyter中DataFrame的显示限制方式

    设置jupyter中DataFrame的显示限制方式

    这篇文章主要介绍了设置jupyter中DataFrame的显示限制方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来
    2020-04-04
  • python 名称空间与作用域详情

    python 名称空间与作用域详情

    这篇文章主要介绍了python 名称空间与作用域详情,函数内部的函数只能在函数内部调用,不能在函数外部调用,通过接下来的学习你将会知道为什么会出现这种情况。

    2021-10-10
  • 详解Python实现同时支持带调用和不调用带装饰器

    详解Python实现同时支持带调用和不调用带装饰器

    一般来说,不带参数装饰器,再使用时不加括号,带参数的装饰器使用时必须加括号,这篇文章主要介绍了Python实现同时支持带调用和不调用带装饰器的相关知识,需要的朋友可以参考下
    2023-06-06
  • Python logging日志库空间不足问题解决

    Python logging日志库空间不足问题解决

    这篇文章主要介绍了Python logging日志库空间不足问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09

最新评论