Python——面向对象篇之异常和反射

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错
  • 异常处理
         python在遇到错误后,会引发异常,如果异常对象并未被处理或者捕捉,则呈现就会用所谓的回溯(traceback)来终止程序的执行,如下所示:
    1 C:\Python27\python.exe D:/python/s11/8day/反射/test.py
    2 Traceback (most recent call last):
    3   File "D:/python/s11/8day/test.py", line 26, in 
    4     print isinstance(d,int)
    5 NameError: name 'd' is not defined

          在python里,每个异常都是类Exception的实例,Exception可以说是所有异常的基类。如果我们捉住错误并对其处理,那整个程序就不会回溯而是继续执行下去。

     2.1 被动异常
                即把代码写在try块里,当程序抛错时自动触发,except则负责捕捉和处理异常,用法如下

    1 try:
    2      代码块
    3 except Exception,e:    #e是exception的实例,是一个对象;上面的错误信息都封装在e中
    4      异常处理          #在这里你可以打印异常信息,如(print e);也可以做其他操作如把异常信息写入日志

          在这需要注意的是:如果你print e的时候,因为正常来说print对象时返回的应该是对象的内存地址,而在异常处理这里,你print对象时会调用exception的__str__方法,将异常信息返回而不是返回内存地址,所以这里你print的时候会发现显示的会是异常信息,对此你不需要觉得奇怪。

           在except捕获异常时,你还可以在except后面再加个except,就像自来水过滤一样一层层的捕获特定的异常

    1 try:
    2     代码块
    3 except KeyError,e:      #试图访问字典里不存在的键
    4     print e
    5 except ValueError,e:    #传入一个调用者不期望的值,即使值的类型是正确的
    6     print e
    7 except Exception,e:     #如果你无法预期会发生什么异常,那好,我们还有个万能异常
    8     print e

           
             另一种写法:

    1 try:
    2     Garen = Hero
    3 except (KeyError,ValueError),e:    #写成元组形式
    4     print e

    2.2 主动触发异常
               不等程序代码遇到错误抛出后才触发,而是我们在预计会出现问题的地方提前触发    

    1 try:
    2     raise Exception('这里出现错误')      #提前传参并实例化异常
    3 except Exception,e:                    #把错误信息封装到exception的实例e里
    4     print e

    2.3 自定义异常
               既是我们自己定义异常的触发条件和处理方法,创建自定义异常的时候需要直接或者间接的继承Exception

    1 class testError(exception):     //继承exception异常基类
    2     def __init__(self,msg=None):
    3         self.msg = msg
    4     def __str__(self):
    5         if self.msg:            //根据传入的参数动态显示异常信息
    6             return self.msg
    7         else:
    8             return "自定义异常"      //默认异常显示信息

    调用自定义异常

    1 try:
    2     raise testError()   //实例化自定义异常类,后面括号可传入参数
    3 except testError,e:
    4     print e

    2.4 finally
               不管try子句是否发生异常都会执行,比如当你在读写文件或者scoket通讯时,不管是否出现异常都应该在结束后关闭文件或者网络套接字,这时就可以把关闭方法放在finally子句中

    1 try:
    2     f = open("test.txt","a")
    3     f.write(data)
    4 except Exception,e:
    5     print e
    6 finally:
    7     f.close() 

    2.5 忽略所有异常

    1 try:
    2     Garen = Hero
    3 except:
    4     pass

         这是一种比较危险的用法,它会忽略程序的所有异常而继续的让程序执行下去。
    异常处理只需要记住一点:当我们知鼯div>

    未经允许不得转载:演道网 » Python——面向对象篇之异常和反射

  • 赞 (0)
    分享到:更多 ()

    评论 0

    评论前必须登录!

    登陆 注册