10.1 Python中的异常
- NameError:尝试访问一个未申明的变量
- Zer0DivisionError:除数为零
- SyntaxError:Python解释器语法错误
- IndexError:请求的索引超出序列范围
- KeyError:请求一个不存在的字典关键字
- IOError:输入/输出错误
- Attribute:尝试访问位置的对象属性
- ValueError:值错误
- TypeError:类型错误,通常指赋值左右两边类型不相同产生的错误
10.2 检测和处理异常
10.2.1 try-except语句
try:
try_suite #监控这里的异常
except Exception1[, reason1]:
except_suite1 #异常处理代码1
except Exception2[, reason1]:
except_suite1 #异常处理代码2
except Exception3[, reason1]:
except_suite1 #异常处理代码3
...
还可以将多个异常放于一个expect语句中:
try:
try_suite #监控这里的异常
except (Exception1, Exception2)[, reason1]:
except_suite #异常处理代码
由于异常在Python 2.5中,被迁移到了新式类上,启用了一个新的“所有异常之母”,这个类叫做BaseException,KeyboardInterrupt和SystemExit与Exception平级。
如果需要捕获所有异常,那么可以这样写:
try:
try_suite #监控这里的异常
except BaseException, e:
except_suite #对所有异常的处理代码
10.2.2 try-finally语句
try-finally与try-excpet区别在于它不是用来捕捉异常的,它常常用来维持一致的行为而无论异常是否发生。
try:
try_suite
finally:
finally_suite #无论如何都执行
举个例子:当尝试读取一个文件的时候抛出异常,最终还是需要关闭文件,代码可以这样处理:
try:
try:
ccfile = open('carddata.txt','r')
txns = ccfile.readlines()
except IOError:
log.write('no txns this month\n')
finally:
ccfile.close()
10.2.3 try-except-else-finally语句总结
try:
try_suite
except Exception1:
suite_for_Exception1
except (Exception2, Exception3, Exception4):
suite_for_Exception_2_3_and_4
except Exception5, Argument5:
suite_for_Exception5_plus_argument
except (Except6, Except7), Argument76:
suite_for_Exception6_and_7_plus_argument
except:
suite_for_all_other_exceptions
else:
no_exceptions_detected_suite
finally:
always_execute_suite