python 异常处理 (转)
一)捕获异常格式一:
try:
<语句>
except <异常1>:
<语句>
except <异常2>:
<语句>
else: 如果没有异常,则执行else块中的语句
<语句>
格式二:
try:
<语句>
finally:
<语句>
不管try语句块中是否发生异常,都将执行finally语句块。
view plaincopy
[*]>>> l =
[*]>>> l
[*]Traceback (most recent call last):
[*] File "<stdin>", line 1, in <module>
[*]IndexError: list index out of range
[*]>>> try:
[*]... l
[*]... except: #此处未使用异常名,表示捕获所有异常
[*] File "<stdin>", line 3
[*] except: #此处未使用异常名,表示捕获所有异常
[*] ^
[*]SyntaxError: invalid syntax
[*]>>> try:
[*]... l
[*]... except: #此处未使用异常名,表示捕获所有异常
[*]... print 'Error'
[*]... else:
[*]... print 'No error'
[*]...
[*]Error
[*]>>> try:
[*]... l
[*]... except:
[*]... print 'error'
[*]... else:
[*]... print 'No error'
[*]...
[*]3
[*]No error
[*]>>> try:
[*]... l
[*]... finally:
[*]... print 'a'
[*]...
[*]3
[*]a
[*]>>> try:
[*]... l
[*]... 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及异常的附加数据
view plaincopy
[*]>>> l =
[*]>>> try:
[*] l
[*]except IndexError,Error
[*]SyntaxError: invalid syntax
[*]>>> l =
[*]>>> try:
[*] l
[*]except IndexError,errorMessage:
[*] print errorMessage
[*]else:
[*] print 'No Error'
[*]
[*]
[*]list index out of range
[*]>>> try:
[*] l/0
[*]except (IndexError,ZeroDivisionError): #捕获IndexError异常或者ZeroDivisionError异常
[*] print 'Error'
[*]else:
[*] print 'No error'
[*]
[*]
[*]Error
[*]>>> try:
[*] l / 0
[*]except:
[*] print 'Error'
[*]else:
[*] print 'No error'
[*]
[*]
[*]Error
[*]>>> try:
[*] l/0
[*]except (IndexError,ZeroDivisionError),value: #捕获IndexError或ZeroDivisionError异常,及其附加数据
[*] print value
[*]
[*]
[*]integer division or modulo by zero
[*]>>>
3)多重异常处理
如果except能够处理该异常,则外围的try语句将不会捕获异常。如果except忽略该异常,则异常将被外围try语句捕获。
view plaincopy
[*]>>> try:
[*]... try:
[*]... l
[*]... except:
[*]... print 'error1'
[*]... except:
[*]... print 'error2'
[*]... else:
[*]... print 'no error'
[*]...
[*]error1
[*]no error
[*]>>> try:
[*]... try:
[*]... l/0
[*]... except IndexError:
[*]... print 'error1'
[*]... except:
[*]... print 'error2'
[*]... else:
[*]... print 'no error'
[*]...
[*]error2
[*]>>> try:
[*]... try:
[*]... l/'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可以定义新的错误类型,以适应脚本的需要。
view plaincopy
[*]>>> class A:
[*] def show(self):
[*] print 'A'
[*]
[*]
[*]>>> try:
[*] raise A
[*]except A:
[*] print 'error'
[*]else:
[*] print 'No error'
[*]
[*]
[*]error
[*]>>>
自定义异常类:
view plaincopy
[*]>>> 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.csdn.net/guopengzhang/article/details/5455341
页:
[1]