海安零距离 海安论坛 海安新闻 海安

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1776|回复: 0

python | 控制流语句(三)

[复制链接]

6234

主题

6234

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
18718
发表于 2019-12-26 17:45 | 显示全部楼层 |阅读模式
目录
            
   

第1节 非常处理惩罚机制

1.1 非常和错误

非常和错误都能引起步伐实行错误而退出,它们属于步伐没有思量到的破例环境,但两种有很大区别:

  • 非常:可以预见的破例环境。如除数为0、范例不对、打开的文件不存在 —— 可以预见
  • 错误:编码逻辑产生的不可预见的环境。如列表只有6个元素,步伐去索引第7个 —— 不可预见


1.2 非常解读

解读非常提示信息,能资助快速发现题目和定位出错代码位置,下面是一个非常解读演示:
此中最告急的是「非常范例」,它表明非常发生缘故原由,也是处理惩罚非常的依据。



1.3 常见非常

python中非常有许多种,但常常会碰到的不多,一样平常只必要把握如下几种即可:
非常范例解释SyntaxError语法错误NameError访问变量未声明ZeroDivisionError除数为 0ValueError传入参数无效TypeError范例错误(对范例的操作无效)AttributeError对象没有这个属性IndexError序列中没有此索引KeyError映射中没有这个键IndentationError缩进错误

1.4 非常捕捉和处理惩罚

可以利用try-except语句,来捕捉处理惩罚python中出现的非常,其利用语法如下:

步伐优先实行try子句,若无非常则忽略except子句直接竣事;若产生非常且与except设置的非常名称划一,则实行except子句;如有多层嵌套且非常与任何的excep都不匹配,则非常将会通报给上层的 try 。
留意:

  • 一个 try 语句大概包罗多个except子句,分别来处理惩罚差别的特定的非常,但最多只有一个分支会被实行
  • 一个except子句可以同时处理惩罚多个非常,这些非常将被放在一个括号里成为一个元组
  • try-except捕捉处理惩罚机制不能滥用,否则代码可读性会降低
常见的有这几种应用场景:用户输入合规性、打开文件是否成功、爬虫向服务器发起哀求。
  1. # 非常处理惩罚机制try:    num = eval(input("请输入一个数字:"))    print(num*2)except NameError:                         # 指定非常范例为NameError    print("输入错误,请输入一个数字!")except:                                   # 没指定任何范例,表现对应的语句块可以处理惩罚全部其他非常    print("其他错误")
复制代码

若想要步伐不停实行,直到满足条件为止,可以巧用死循环 + 非常
  1. # 若想要不停实行,直到满足条件为止:用死循环while 1:    try:        num = eval(input("请输入一个数字:"))        print(num*2)        break                             # 跳出死循环    except NameError:                     # 指定非常范例为NameError        print("输入错误,请输入一个数字!")    except:                               # 没指定任何范例,表现对应的语句块可以处理惩罚全部其他非常        print("其他错误")
复制代码
更多可参看:https://www.runoob.com/python3/python3-errors-execptions.html


1.5 else拓展

try-except 语句另有一个可选的else子句,如果利用这个子句,那么必须放在全部的except子句之后。
和for循环、while循环中的else一样,try-except中的else子句将在try子句没有发生任何非常时才实行。
  1. for arg in sys.argv[1:]:    try:        f = open(arg, 'r')    except IOError:        print('cannot open', arg)    else:        print(arg, 'has', len(f.readlines()), 'lines')        f.close()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|深圳论坛-深圳人的网上家园  

GMT+8, 2020-10-27 16:49 , Processed in 0.098125 second(s), 30 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表