python异常

jopen 10年前

TRY······EXCEPT   

这个语句主要是捕获异常,在python中的运行过程主要是:出现异常时,python将停止try中的语句进行,就爱那个异常传递给except子句,寻找可匹配的except子句,如果找到,将做except 组下面的处理,然后处理完成后再将控制权交给try,进行处理。进行这样反复操作。如下:

    try:           open('aaa.txt')       except IOError as e:           pass


 另外,TRY······EXCEPT 可以加修饰语句,如:except Exception as var,如果出现异常将为变量提供 raise语句异常类型的实例。异常处理程序可以处理该值,并获得更多关于异常的信息。except 可以指定多个异常代码处理模块,如:

    

  try:               #do somethong        except  IOError  as e:                  #处理I/O错误        except  TypeError  as e:                  #处理类型错误        except  NameError  as e:                  #处理名称错误                  error_log.write('An error  occeurred : %s \n ' % e)


另外一种方式:     

   try:                    #do somethong          except  (IOError,TypeError   NameError ) as e:                    #处理错误                    error_log.write('An error  occeurred : %s \n ' % e)


使用Exception可以捕捉除了与程序退出相关异常之外的所有异常,如:

     try:                 #do somethong        except  (IOError,TypeError   NameError ) as e:                 #处理错误                 error_log.write('An error  occeurred : %s \n ' % e)


 TRY······EXCEPT······ELSE

         try语句也支持else语句,但是else子句必须跟在最后一个except子句后面,如果try中的代码未引发异常,则会执行else中的代码。如:

    try:                   f=open('foo.txt','r')       except  IOError  as  e:                   error_log.write('An error  occeurred : %s \n ' % e)        else :                   data=f.read()                   f.close()


TRY······EXCEPT ······FINALLY

  f=open('foo.txt','r')              try:                      #进行一些处理                                 finally:                      data=f.close()                      #无论发生什么,都会关闭文件

 finally子句不是用于捕获异常,而是用于提供一些代码,无论出现什么错误都会执行该代码。如果出现异常,控制权首先交给 finally,然后执行完毕后,将重新引发的异常交给另外的异常处理程序。如果未出现异常,try子句的代码完毕后,立即执行finally子句中的代 码。
    自定义异常  

 class LengthRequiredException(Exception):                def __init__(self,length,minLength):                    Exception.__init__(self)                    self.length = length                    self.minLength = minLength

    引发自定义的异常  

l = [1,2,3,4,5]            minLength = 6            try:                raise LengthRequiredException(len(l),minLength)            except IndexError:                print("index out of bounds")            except LengthRequiredException as e:                print("Length not fit :length is %d required %d" %(e.length,e.minLength))            else:                print("no exception was raised")            finally:                print("finally will be execute")