python异常处理

Posted by fishcried on October 19, 2014

1.异常使用场景

  1. 错误处理.异常常常用来捕获错误状况,进行错误处理
  2. 事件通知.可以主动抛出异常,作为事件通知来使用

Python使用try...except来处理异常,使用raise来引发异常.

2.内置异常

内置异常 含义
Exception 所有异常的基类
AttributeError 特性引用或复制失败
IOError 试图打开不存在的文件
IndexError 序列中不存在索引时发生
KeyError 映射中不存在键值时发生
NameError 找不到变量名字时发生
SyntaxError 语法错误发生
TypeError 内建操作或这函数应用于错误类型的对象时发生
ValueError 内建操作或这函数应用于正确的对象,但是对象使用不合适的值
ZeroDivisionError 除法或者模除第二个参数为0时候引发

例如:

  • 使用不存在的字典关键字将引发 KeyError 异常。
  • 搜索列表中不存在的值将引发 ValueError 异常。
  • 调用不存在的方法将引发 AttributeError 异常。
  • 引用不存在的变量将引发 NameError 异常。
  • 未强制转换就混用数据类型将引发 TypeError 异常

More info
>>> import exceptions
>>> dir(exceptions)

3.管理异常

抛出 python内建异常触发后会自动抛出,也可以使用raise Exception主动抛出任何异常.

捕获 如果不对抛出的异常进行捕获,那么python会打印堆栈信息推出,可以通过try...except...来处理异常.

自定义 很多时候对会自定义异常供自己的程序使用,例如自定义一个启动失败异常。

class StartUpError(Excetion):
    """
    xxx
    """

4.try except结构

try:
	statement
except xxxError:
	handle errors

1.except后可以捕获多个异常

except xxx1Error, xxx2Error,...:

2.对异常使用别名

except (xxxError) as e:
	print e

or

except (xxx1Error,xxx2Error) as e:
	print e	

3.else 可以使用else语句,没有捕获到异常,则执行else下语句

try:
	statement
except xxxError:
	handle errors
else:
	else statement

4.final 指定final语句,最后一定会执行

try:
	statement
except xxxError:
	handle errors
final:
	clean up things	

5.with .. [as value] with ...[as value]try...final的一个简化,非常实用.

with open(filename, 'r') as f:
	for line in f:
		print line

6.一段错误处理的代码

while True:
	try:
		x = input('Enter number:')
		y = input('Enter number:')
		value = x/y
		print 'x/y' is ', value
	except (Exception) as e:
		print 'Invalid input:' e
		print 'Please try again'
	else:
		break

修改记录

Why Who When
整理旧笔记 fishcired 2014-10-19