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

[经验分享] 学学python(2):错误和异常

[复制链接]

尚未签到

发表于 2015-4-26 05:18:33 | 显示全部楼层 |阅读模式
1.       python中有很多中异常,比如使用没有申请的变量会为NameError,语法不对为SyntaxError,请求的索引超出序列范围为IndexError。

2.       异常处理:主要有两种形式try-except和try-finally,我们只能使用其中的一种,一个try语句可以对应一个或多个except子句,但只能对应一个finally子句或是一个try-except-finally复合语句。
Try-except-else:检测和处理异常,else子句处理没有探测到异常时执行的代码。
try-finally:检测并做一些必要的清除工作。
try-except-finally:上面两者都可以做到。
下面举个例子说明,我们写一个转换为整数的函数,如下:
def ConInt(obj):

     try:

         result=int(obj)

     except ValueError:

         result="could not convert"

     except TypeError:

         result='type is wrong'

     return result
下面是函数调用:
>>> ConInt('asd')

'could not convert'

>>> ConInt([1,2])

'type is wrong'
我们也可以在一个except中处理多个异常,将异常写为元组的形式如下
def ConInt(obj):

     try:

         result=int(obj)

     except (ValueError,TypeError):

         result="could not convert"  

     return result

3.       异常参数,可以携带更详细的异常信息,该参数以元组的方式放在except后面,下面是例子。
>>> def ConInt(obj):

...  try:

...      result=int(obj)

...  except (ValueError,TypeError),diag:

...      result=str(diag)

...  return result

...

>>> ConInt('asd')

"invalid literal for int() with base 10: 'asd'"

>>> ConInt([1,3])

"int() argument must be a string or a number, not 'list'"

4.       With语句:只工作于支持上下文管理协议的对象。比如file对象就支持,那我们就可以使用wirh,如下:
With open(‘test.txt’,’r’) as f:
For eachLine in f:
     # do something
该段代码会视图打开一个文件,然后遍历文件中的每一行,完成后关闭文件,使用with的好处是这段代码无论哪里发生了异常,都会执行清理的代码,文件会被自动关闭。和使用try-finally是一样的。

5.       触发异常
使用raise[SomeException[,args [,traceback]]]语句来触发异常。
参数SomeException为触发异常的名字,必须是字符串,类或实例。
参数args为可选,指示错误原因的元组。
参数traceback,可选,当异常触发时新生成一个用于异常-正常话的追踪对象,当你想重新引发异常时,该参数很有用,可以用来区别先前和当前的位置,如果没有写None。

6.可以通过sys模块中exc_info函数来获取异常信息,如下:
>>> try:

...  int('asdf')

... except:

...  import sys

...  exc_tuple=sys.exc_info()

...

>>> print exc_tuple

(, ValueError("invalid literal for int() with base 10: 'asdf'",), )

>>> for item in exc_tuple:

...  print item

...  


invalid literal for int() with base 10: 'asdf'


从后面的for中我们可以看出得到的异常元组包括三项信息,分别表示异常类,异常类的实例和追踪对象。
7.     下图为python异常的继承体系结构:
DSC0000.jpg

运维网声明 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-60589-1-1.html 上篇帖子: 学习Python操作Excel文件(1) 下篇帖子: Java程序员学习Python第一天的心得
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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