您的位置:首页 > 编程语言 > Python开发

python中,exit,return,sys.exit()等的区别与使用方法

2012-07-31 23:52 519 查看
有这样一道题目:字符串标识符.修改例6-1的idcheck.py脚本,使之可以检测长度为一的标识符,并且可以识别Python关键字,对后一个要求,你可以使用keyword模块(特别是keyword.kelist)来帮你.

我最初的代码是:

#!/usr/bin/envpython

importstring
importkeyword
importsys

#Getallkeywordforpython
#keyword.kwlist
#['and','as','assert','break',...]
keyWords=keyword.kwlist

#Getallcharacterforidentifier
#string.letters==>'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
#string.digits==>'0123456789'
charForId=string.letters+"_"
numForId=string.digits

idInput=raw_input("Inputyourwords,please!")

ifidInputinkeyWords:
print"%siskeywordfotPython!"%idInput
else:
lenNum=len(idInput)
if(1==lenNum):
if(idInputincharForIdandidInput!="_"):
print"%sislegalidentifierforPython!"%idInput
else:
#It'sjust"_"
print"%sisn'tlegalidentifierforPython!"%idInput

else:
if(idInput[0:1]incharForId):
legalstring=charForId+numForId
foriteminidInput[1:]:
if(itemnotinlegalstring):
print"%sisn'tlegalidentifierforPython!"%idInput
sys.exit(0)
print"%sislegalidentifierforPython!2"%idInput
else:
print"%sisn'tlegalidentifierforPython!3"%idInput


代码完毕后,我测试每一条分支,测试到分支时,必须输入_d4%等包含非法字符的标识符才能进行测试,我最初以为,sys.exit(0)---正常退出脚本,sys.exit(1)非正常退出脚本,但是实际情况是/9sys.exit(1),仅输出返回码不同):

if(itemnotinlegalstring):
print"%sisn'tlegalidentifierforPython!"%idInput
sys.exit(0)
Inputyourwords,please!_d4%
_d4%isn'tlegalidentifierforPython!

Traceback(mostrecentcalllast):
File"E:/python/idcheck.py",line37,in<module>
sys.exit(0)
SystemExit:0
>>>


由此可见,这样做没有达到我预期如下输出的效果,那么,问题在哪里呢?在于sys.exit()始终会抛出一个SystemExit异常。

Inputyourwords,please!_d4%
_d4%isn'tlegalidentifierforPython!


#!/usr/bin/envpython

importstring
importkeyword
importsys
importtraceback

try:
#Getallkeywordforpython
#keyword.kwlist
#['and','as','assert','break',...]
keyWords=keyword.kwlist

#Getallcharacterforidentifier
#string.letters==>'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
#string.digits==>'0123456789'
charForId=string.letters+"_"
numForId=string.digits

idInput=raw_input("Inputyourwords,please!")

ifidInputinkeyWords:
print"%siskeywordfotPython!"%idInput
else:
lenNum=len(idInput)
if(1==lenNum):
if(idInputincharForIdandidInput!="_"):
print"%sislegalidentifierforPython!"%idInput
else:
#It'sjust"_"
print"%sisn'tlegalidentifierforPython!"%idInput

else:
if(idInput[0:1]incharForId):
legalstring=charForId+numForId
foriteminidInput[1:]:
if(itemnotinlegalstring):
print"%sisn'tlegalidentifierforPython!"%idInput
sys.exit()
print"%sislegalidentifierforPython!2"%idInput
else:
print"%sisn'tlegalidentifierforPython!3"%idInput

exceptSystemExit:
pass
except:
traceback.print_exc()

上面的代码获取sys.exit()抛出的SystemExit异常。
return:在定义函数时从函数中返回一个函数的返回值,终止函数的执行。
exit:下面的代码中,如果把sys.exit()替换成exit,则exit仅仅跳出离它最近的for循环,print"%sislegalidentifierforPython!2"%idInput语句会被输出,这里,exit的作用类似于break.但实际上break和exit作用并不同
foriteminidInput[1:]:
if(itemnotinlegalstring):
print"%sisn'tlegalidentifierforPython!"%idInput
sys.exit()
print"%sislegalidentifierforPython!2"%idInput
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: