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

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

   我最初的代码是:

    

[html]  view plain  copy
  1. #!/usr/bin/env python  
  2.   
  3. import string  
  4. import keyword  
  5. import sys  
  6.   
  7. #Get all keyword for python  
  8. #keyword.kwlist  
  9. #['and', 'as', 'assert', 'break', ...]  
  10. keyWords = keyword.kwlist  
  11.   
  12. #Get all character for identifier  
  13. #string.letters ==> 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'  
  14. #string.digits  ==> '0123456789'  
  15. charForId = string.letters + "_"  
  16. numForId = string.digits  
  17.   
  18. idInput = raw_input("Input your words,please!")  
  19.   
  20. if idInput in keyWords:  
  21.     print "%s is keyword fot Python!" % idInput  
  22. else:  
  23.     lenNum = len(idInput)  
  24.     if(1 == lenNum):  
  25.         if(idInput in charForId and idInput != "_"):  
  26.             print "%s is legal identifier for Python!" % idInput  
  27.         else:  
  28.             #It's just "_"  
  29.             print "%s isn't legal identifier for Python!" % idInput  
  30.   
  31.     else:  
  32.         if(idInput[0:1] in charForId):  
  33.             legalstring = charForId + numForId  
  34.             for item in idInput[1:]:  
  35.                 if (item not in legalstring):  
  36.                     print "%s isn't legal identifier for Python!" % idInput  
  37.                     sys.exit(0)  
  38.             print "%s is legal identifier for Python!2" % idInput  
  39.         else:  
  40.             print "%s isn't legal identifier for Python!3" % idInput  
  41.                       
  42.   
  43.               
  44.           
  45.           
  46.           
  47.           

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

    

[html]  view plain  copy
  1. if (item not in legalstring):  
  2.     print "%s isn't legal identifier for Python!" % idInput  
  3.    sys.exit(0)  
[html]  view plain  copy
  1. Input your words,please!_d4%  
  2. _d4% isn't legal identifier for Python!  
  3.   
  4. Traceback (most recent call last):  
  5.   File "E:/python/idcheck.py", line 37, in <module>  
  6.     sys.exit(0)  
  7. SystemExit: 0  
  8. >>>   

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

[html]  view plain  copy
  1. Input your words,please!_d4%  
  2. _d4% isn't legal identifier for Python!  


[html]  view plain  copy
  1. #!/usr/bin/env python  
  2.   
  3. import string  
  4. import keyword  
  5. import sys  
  6. import traceback  
  7.   
  8. try:  
  9.     #Get all keyword for python  
  10.     #keyword.kwlist  
  11.     #['and', 'as', 'assert', 'break', ...]  
  12.     keyWords = keyword.kwlist  
  13.   
  14.     #Get all character for identifier  
  15.     #string.letters ==> 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'  
  16.     #string.digits  ==> '0123456789'  
  17.     charForId = string.letters + "_"  
  18.     numForId = string.digits  
  19.   
  20.     idInput = raw_input("Input your words,please!")  
  21.   
  22.     if idInput in keyWords:  
  23.         print "%s is keyword fot Python!" % idInput  
  24.     else:  
  25.         lenNum = len(idInput)  
  26.         if(1 == lenNum):  
  27.             if(idInput in charForId and idInput != "_"):  
  28.                 print "%s is legal identifier for Python!" % idInput  
  29.             else:  
  30.                 #It's just "_"  
  31.                 print "%s isn't legal identifier for Python!" % idInput  
  32.   
  33.         else:  
  34.             if(idInput[0:1] in charForId):  
  35.                 legalstring = charForId + numForId  
  36.                 for item in idInput[1:]:  
  37.                     if (item not in legalstring):  
  38.                         print "%s isn't legal identifier for Python!" % idInput  
  39.                         sys.exit()  
  40.                 print "%s is legal identifier for Python!2" % idInput  
  41.             else:  
  42.                 print "%s isn't legal identifier for Python!3" % idInput  
  43.   
  44. except SystemExit:  
  45.     pass  
  46. except:  
  47.     traceback.print_exc()  
[html]  view plain  copy
  1.    

上面的代码获取sys.exit()抛出的SystemExit异常。

return:在定义函数时从函数中返回一个函数的返回值,终止函数的执行。

exit:下面的代码中,如果把sys.exit()替换成exit,则exit仅仅跳出离它最近的for循环, print "%s is legal identifier for Python!2" % idInput语句会被输出,这里,exit的作用类似于break. 但实际上break和exit作用并不同

[html]  view plain  copy
  1.   
[html]  view plain  copy
  1. for item in idInput[1:]:  
  2.     if (item not in legalstring):  
  3.         print "%s isn't legal identifier for Python!" % idInput  
  4.         sys.exit()  
  5. print "%s is legal identifier for Python!2" % idInput  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: sysPython内置的一个模块,提供了对Python解释器的访问和控制。在sys模块中定义了许多与Python解释器紧密相关的函数和变量。sys.exit()是sys模块中的一个函数,用于退出当前程序,并返回一个状态码给操作系统,状态码默认为0,表示正常退出。在sys.exit()函数中,传递1作为参数表示程序异常终止,返回给操作系统的状态码为1。 ### 回答2: sysPython标准库中的一个模块,全称为system。它提供了访问与Python解释器相关的变量和函数的功能。sys模块是Python程序中常用的模块之一。使用sys模块可以访问与Python解释器和系统相关的变量和函数。 在sys模块中,exit()是一个用于退出Python解释器的函数。当我们在Python代码中使用sys.exit(1)时,表示程序以非零的状态退出,并且终止程序的运行。通常,0表示程序正常退出,而非零状态码则表示程序出现了异常或错误。 使用sys.exit()函数可以在程序任意位置终止程序的运行,并返回指定的状态码。这在需要在程序中检测到某些条件时,立即终止程序并返回相应的错误码时非常有用。它可以用于处理异常、错误、故障等情况,帮助我们更好地进行程序控制和错误处理。 需要注意的是,sys.exit()函数会引发SystemExit异常,因此若没有适当地进行异常处理,程序在此处会被终止执行。而且,在大部分情况下,直接使用return语句来退出程序更加合适,sys.exit()函数多用于在主程序中的特殊情况下使用。 ### 回答3: sysPython标准库中的一个模块,它提供了对解释器相关的变量和函数的访问。在这个模块中,sys.exit()函数用于退出当前的Python解释器。 sys模块包含了一些与Python解释器和运行时环境相关的功能。它提供了对解释器的一些控制和访问,例如命令行参数、标准输入输出、标准错误等。sys.exit()函数是sys模块中的一个函数,用于终止当前正在运行的程序。 当我们在程序中调用了sys.exit(1)时,程序会立即终止并返回退出码1给操作系统。一般来说,退出码为0表示程序正常退出,而非零的退出码则表示程序异常退出或发生错误。在这里,我们传递的退出码为1,通常表示程序异常退出。终止程序的同时,也会关闭所有的文件和清理相关资源。 总之,sysPython的标准库模块,提供了对解释器和运行时环境的访问。sys.exit(1)是sys模块中的函数,用于终止当前的Python程序,并返回一个退出码给操作系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值