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

[经验分享] python-异常处理

[复制链接]

尚未签到

发表于 2017-4-23 10:24:11 | 显示全部楼层 |阅读模式
有一种说法:
程序错误可分为,编译时错误和运行时错误。写过c程序的人都知道,c程序是最容易出现一些莫名其妙的运行时错误,其实也不算莫名其妙,只是编程时不小心出错,但是编译时候却毫无问题,运行时却总得不到自己想要的结果。

编译时错误,其实很常见,语法错误之类的都算,在程序编译时候就提示的错误。而运行时错误是程序在加载运行时出现的错误,比如数组下标越界,除数为0等,在编译时候无法判断的错误。

java 、python等语言,使用try。。(catch/except)块来捕获这一类错误,也就是我们常说的异常。其实学过java的人应该比较熟悉Error和Exception这两大类别的错误。。。然后再有不懂的。。赶紧自己先去科普一下。。

python 属于面向对象语言,程序抛出的异常,其实也是一个类。
常见的异常类如下:
异常描述
NameError尝试访问一个没有申明的变量
ZeroDivisionError除数为0
SyntaxError语法错误
IndexError索引超出序列范围
KeyError请求一个不存在的字典关键字
IOError输入输出错误(比如你要读的文件不存在)
AttributeError尝试访问未知的对象属性
ValueError传给函数的参数类型不正确,比如给int()函数传入字符串形


python的try语句有两种风格:

一种是处理异常(try/except/else)

try/except/else风格

try:
    <语句>
#运行别的代码
except
<名字>:
    <语句>
#如果在try部份引发了'name'异常
except
<名字>,<数据>:
    <语句>
#如果引发了'name'异常,获得附加的数据
else:
    <语句>
#如果没有异常发生

eg:
a = 0
b = 4
c = 2
try:
   f = b / a
#f = b / c
except ZeroDivisionError, e:
   print e
else:
   print f
-----------------------------------------------------------------------------------------------
二种是无论是否发生异常都将执行最后的代码(try/finally)

try/finally风格

try:
    <语句>
finally:
    <语句>
#退出try时总会执行

a = 0
b = 4
r = 10
try:
   r = b / a
except ZeroDivisionError, e:
   print e
finally:
   print r
--------------------------------------------------------------------------------------

抛出异常:(有时候程序需要主动抛出异常,然后这种情况我们怎么实现呢?)

格式如下:
   
raise [SomeException [, args [,traceback]]  

第一个参数,SomeException必须是一个异常类,或异常类的实例
第二个参数是传递给SomeException的参数,必须是一个元组。这个参数用来传递关于这个异常的有用信息。

第三个参数traceback很少用,主要是用来提供一个跟中记录对象(traceback)

eg:

try:

     raise NameError,('Throw Exception')

except NameError, e:

     print e  #结果返回:Throw Exception

运维网声明 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-368072-1-1.html 上篇帖子: python初学笔记 下篇帖子: python 结巴分词
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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