Python中exit、return、sys.exit()等使用实例和区别
admin
2023-07-31 02:27:32
0

有这样一道题目:  字符串标识符.修改例 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
    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

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...