python常见异常总结:http://bbs.fishc.com/forum.php?mod=viewthread&tid=45814&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403
AssertError:断言assert语句失败
AttributeError:尝试访问未知的/不存在的对象的方法
IndentationError:缩进错误
ImportError:导入模块失败
SyntaxError:python的语法错误
ZeroDivisionError:除零错误
IndexError:索引超出序列的范围
TypeError:不同类型直接运算
KeyError:字典中查找一个不存在的关键字
IOError:没有文件或目录
MemoryError:内存溢出(可通过删除和释放对象解决)
NameError:尝试访问一个不存在的变量
KeyboardError:中断键(Ctrl+C)
OSError:操作系统产生的异常(例如打开一个不存在的文件)
OverflowError:数值运算超出最大限制
RuntimeError:一般运行时出现的错误(递归超出最大迭代次数等)
ReferenceError:试图访问一个已经被垃圾回收机制回收的对象
ValueError:传入无效的参数
FloatingPointError:浮点计算错误
EOFError:用户输入文件末尾标志EOF(Ctrl+D)
NotImplementedErrror:尚未实现的方法
检测并处理异常
语法:
try:
检测范围
except Exception[as reason]: #Exception异常类型 reason:异常原因
出现异常后处理异常的代码
finally:
无论如何让都会被执行的代码
例:
【代码1】
try:
f = open('G:\\new.txt','w') #以w方式打开文件
f.write('I love you!')
1/0 #发生除以0异常
f.close() #发生除以0异常后,直接跳过此句话
except (IOError,ZeroDivisionError) as reason: #捕获初零异常
print('文件出错误了!\n' + str(reason)) #打印错误原因
文件出错误了!
integer division or modulo by zero
但是:并没有把'I love you!'写入'G:\\new.txt'文件,
因为除零异常发生,直接跳过f.close()语句,因此缓冲区中的
数据还没有写入文件,就被释放。
【代码2】修改成带finally的代码
try:
f = open('G:\\new.txt','w') #以w方式打开文件
f.write('I love you!')
1/0 #发生除以0错误
except (IOError,ZeroDivisionError) as reason: #捕获初零异常
print('文件出错误了!\n' + str(reason)) #打印错误原因
finally: #把必须要执行的代码放在finally之后
f.close()
文件出错误了!
integer division or modulo by zero
此时,把'I love you!'写入了'G:\\new.txt'文件