python异常
jopen
11年前
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")