一)捕获异常
格式一:
try:
<语句>
except <异常1>:
<语句>
except <异常2>:
<语句>
else: 如果没有异常,则执行else块中的语句
<语句>
格式二:
try:
<语句>
finally:
<语句>
不管try语句块中是否发生异常,都将执行finally语句块。
>>> l = [1,2,3] >>> l[5] Traceback (most recent call last): File "
二)处理异常:
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 "
二)引发异常:
在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 "