常见python 异常:
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxErrorPython代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同
名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
手动触发异常:
Raise IndexError
vimmanual_error.py
#!/usr/bin/envpython
try:
name=raw_input('Name:').strip()
age = raw_input('Age:').strip()
if len(name) == 0:
raise KeyError
exceptKeyError,err:
print 'No valid key',err
制作自己的异常:
classMyException(Exception): #继承对象的异常系统函数
pass
try:
#some code here
raiseMyException
exceptMyException:
print"MyException encoutered"
Try….finally
Finally----无论try块是否抛出异常(有错误),永远执行的代码。通常用来执行关闭文件,断开服务器连接的功能等等。
classMyException(Exception):pass
try:
#some code here
raiseMyException
exceptMyException:
print"MyException encoutered"
finally:
print"Arrive finally”
可以在try块里加入else块,代码块将在没有异常被抛出的时候执行:
try:
print"normal code here"
exceptMyException:
print"MyException encoutered"
else:
print "Noexception”
Try…except..else
如果没有异常则执行else后面的语句:
[root@node110error]# cat try_except_else.py
#!/usr/bin/envpython
try:
name = raw_input('Name:').strip()
if len(name) == 0:
raise KeyError
exceptKeyError,err:
print 'No valid key',err
else:
print 'No err found...'
不管是什么错误,都会报错:(万能错误),一般不用
Try….finally
raise异常、同时添加数据
raise异常的同时,我们可以添加一些额外的数据,就像下面的例子一样:
classMyException(Exception):
pass
try:
raiseMyException,", and some additional data"
exceptMyException,data:
print"MyException encoutered"
print data
---------output-------?