源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-10-04 04:20 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Python中exit、return、sys.exit()等使用实例和区别
有这样一道题目:  字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来帮你. 我最初的代码是:
[u]复制代码[/u] 代码如下:
#!/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),仅输出返回码不同):
[u]复制代码[/u] 代码如下:
  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异常。
[u]复制代码[/u] 代码如下:
Input your words,please!_d4% _d4% isn't legal identifier for Python!
[u]复制代码[/u] 代码如下:
#!/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作用并不同
[u]复制代码[/u] 代码如下:
                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
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部