设为首页 收藏本站
查看: 588|回复: 0

[经验分享] Python学习笔记七-错误和异常

[复制链接]

尚未签到

发表于 2015-12-1 15:15:07 | 显示全部楼层 |阅读模式
  程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的。
  7.1错误和异常
  1、错误
  从软件方面来看,错误分为语法错误和逻辑错误两种。这两种错误都将导致程序无法正常进行下去,当Python检测到一个错误时就出现了异常。
  2、异常
  当编译器检测到错误并且意识到错误条件。解释器会引发一个异常(程序员也可以自己引发一个异常,后面会说到)。
  以下是7种Python中常见的错误。
  1、NameError,尝试访问一个未申明的例子。
  2、ZeroDivisionError,零除错误。
  3、SynataxError,解释器语法错误。
  4、IndexError,请求的索引超出范围。
  5、KeyError,请求一个不存在的字典Key。
  6、IOError,输入输出错误,例如尝试打开一个不存在的文件。
  7、AttributeError,尝试访问 为未知的对象属性。
  7.2异常检测和异常处理
  7.2.1 try-excep语句



try:
FileTest=open('blash','r')
except IOError,e:
print 'could not open file'
  此时当发生输入输出错误的时候程序不会停止,而是捕获异常显示预先定义的字符串。需要注意的是只有当捕获IOError时会执行print语句,当发生其他类型的异常时程序仍会停止,此时我们我们可能需要带多个except的try语句。
  7.2.2带有多个except的try语句
  可以将多个except语句连起来,如下所示
  except Exception1[,reason1]:
  suit_for_exception1
  except Exception2[,reason2]:
  sut_for_exception2
  程序执行时未发生错误忽略所有except语句,如果发生异常则在多个except语句中查找匹配的异常。这样开发时既能捕获多种类型异常,帮助我们处理错误。
  7.2.3捕获所有异常
  根据上面带多个except的语句可以捕获多种异常,但事实上程序总会发生我们意想不到的异常,所有如果可以捕获所有异常而不仅限于我们指定的异常那么对开发将有比较大的帮助。
  但是捕获所有所有异常有个缺陷,就是它不会告诉你到底捕获了什么异常,也无法让你应对不同类型的异常。
  它的用法是:



try:
except (KeyboardInterrupt,SystemExit):
#user wants quit
raise
except Exception:
#handle real Errors
  需要解释的是KeyboardInterrupt,SystemExit并不是真正意义上的异常,前者是用户按下Ctrl+C后者表示程序需要退出,所以想要程序正常退出时不被捕获异常需要上面的代码。
  7.2.4获取异常原因
  捕获异常后只有得到异常发生的原因才能帮助我们改进。
  except语句的使用:
  except exception[,reason]
  括号中的reason即是异常的原因,异常参数。异常参数可以忽略,如果需要访问异常的原因那么reason则是必须的。reason是包含导致异常的代码的诊断信息的类实例,虽然从异常的名字就可以获知发生了何种异常,但是reason将提供更多的异常信息。
  用法如下:



def safe_float(object):
try:
retval=float(object)
except (ValueError,TypeError),reason:
retval=str(reason)
return retval
print safe_float('xyz')
  程序将显示could not convert string to float: xyz,是的编译器返回了具体的错误原因。
  7.2.5 else 语句
  我们已经见过if-else,while-else语句,try-except-else当然也是可以使用的,其意义是在try范围内没有异常检查到则执行else语句。
  7.2.6 finally语句
  try-except-finally中的finally子句表示无论是否捕获到异常都将执行的一段代码。当然"try-except-else-finally"也是完全可以搭配的。很简单不在多说,需要注意的是except语句可以有不止一个,但是至少要有一个。else和finally都是可选的。
  7.3异常触发
  7.3.1 raise语句
  有时我们可能需要引发一个异常,此时需要raise语句。使用如下:
  raise [SomeException[,args[,traceback]]]
  第一个参数SomeException是必要的,你需要提供要引发的异常名。第二个参数args是将参数传递给异常;第三个参数是用于异常-正常化(exception-narmally)的跟踪记录(traceback)记录。当程序运行到raise语句时会跳出并引发你需要的异常。
  7.4断言
  7.4.1 断言可以理解为(raise if not...)当布尔值为假时抛出异常。断言关键字为assert,用法如下:
  assert expression[,arguments]
  表达式后面是我们提供的异常参数。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145987-1-1.html 上篇帖子: 《think in python》学习 下篇帖子: Python实现SYN Flood攻击
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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