python 异常处理

一)捕获异常

格式一:

try:

    <语句>

except <异常1>:

    <语句>

except <异常2>:

    <语句>

else:           如果没有异常,则执行else块中的语句

    <语句>

格式二:

try:

    <语句>

finally:

    <语句>

不管try语句块中是否发生异常,都将执行finally语句块。

>>> l = [1,2,3] >>> l[5] Traceback (most recent call last): File "", line 1, in IndexError: list index out of range >>> try: ... l[5] ... except: #此处未使用异常名,表示捕获所有异常 File "", line 3 except: #此处未使用异常名,表示捕获所有异常 ^ SyntaxError: invalid syntax >>> try: ... l[5] ... except: #此处未使用异常名,表示捕获所有异常 ... print 'Error' ... else: ... print 'No error' ... Error >>> try: ... l[2] ... except: ... print 'error' ... else: ... print 'No error' ... 3 No error >>> try: ... l[2] ... finally: ... print 'a' ... 3 a >>> try: ... l[5] ... finally: ... print 'a' ... a Traceback (most recent call last): File "", line 2, in IndexError: list index out of range >>>

 

二)处理异常:

AttributeError: 调用不存在的方法引发的异常

EOFError: 遇到文件末尾引发的异常

ImportError: 导入模块出错引发的异常

IndexError: 列表越界引发的异常

IOError: I/O 操作引发的异常,如打开文件出错等

KeyError:使用字典中不存在的关键字引发的异常

NameError:使用不存在的变量名引发的异常

TabError: 语句块缩进不正确引发的异常

ValueError: 搜索列表中不存在的值引发的异常

ZeroDivisionError: 除数为零引发的异常

 

except语句主要有以下几种用法:

except:      捕获所有异常

except  <异常名>:

except  <异常名1,异常名2>:  捕获异常名1或者异常名2

except  <异常名>, <数据>: 捕获指定异常及附加的数据

except  (异常名1,异常名2), <数据>:  捕获异常名1或者异常名2及异常的附加数据

>>> l = [1,2,] >>> try: l[5] except IndexError,Error SyntaxError: invalid syntax >>> l = [1,2,3] >>> try: l[5] except IndexError,errorMessage: print errorMessage else: print 'No Error' list index out of range >>> try: l[2]/0 except (IndexError,ZeroDivisionError): #捕获IndexError异常或者ZeroDivisionError异常 print 'Error' else: print 'No error' Error >>> try: l[5] / 0 except: print 'Error' else: print 'No error' Error >>> try: l[2]/0 except (IndexError,ZeroDivisionError),value: #捕获IndexError或ZeroDivisionError异常,及其附加数据 print value integer division or modulo by zero >>>

 

3)多重异常处理

如果except能够处理该异常,则外围的try语句将不会捕获异常。如果except忽略该异常,则异常将被外围try语句捕获。

>>> try: ... try: ... l[5] ... except: ... print 'error1' ... except: ... print 'error2' ... else: ... print 'no error' ... error1 no error >>> try: ... try: ... l[1]/0 ... except IndexError: ... print 'error1' ... except: ... print 'error2' ... else: ... print 'no error' ... error2 >>> try: ... try: ... l[1]/'s' ... except IndexError: ... print 'error1' ... except ZeroDivisionError: ... print 'error2' ... else: ... print 'no error' ... Traceback (most recent call last): File "", line 3, in TypeError: unsupported operand type(s) for /: 'int' and 'str' >>>

 

二)引发异常:

在python中可以通过使用raise语句手工引发异常。在类中也可以使用raise引发异常,并向异常传递数据。使用raise可以定义新的错误类型,以适应脚本的需要。

 

>>> class A: def show(self): print 'A' >>> try: raise A except A: print 'error' else: print 'No error' error >>>

 

自定义异常类:

>>> class MyError(Exception): def __init__(self,data): #重载__init__方法 self.data = data def __str__(self): return self.data #重载__str__方法 >>> raise MyError,'error' Traceback (most recent call last): File "", line 1, in raise MyError,'error' MyError: error >>> try: raise MyError,'raise MyError' except MyError,data: print data else: print 'no error' raise MyError >>>

你可能感兴趣的:(Python,python,file,exception,list,class,module)