一)捕获异常
格式一:
try:
<语句>
except <异常1>:
<语句>
except <异常2>:
<语句>
else: 如果没有异常,则执行else块中的语句
<语句>
格式二:
try:
<语句>
finally:
<语句>
不管try语句块中是否发生异常,都将执行finally语句块。
- >>> l = [1,2,3]
- >>> l[5]
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- IndexError: list index out of range
- >>> try:
- ... l[5]
- ... except: #此处未使用异常名,表示捕获所有异常
- File "<stdin>", 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 "<stdin>", line 2, in <module>
- 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 "<stdin>", line 3, in <module>
- 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 "<pyshell#110>", line 1, in <module>
- raise MyError,'error'
- MyError: error
- >>> try:
- raise MyError,'raise MyError'
- except MyError,data:
- print data
- else:
- print 'no error'
- raise MyError
- >>>
原文章地址:http://blog.youkuaiyun.com/guopengzhang/article/details/5455341