1.Python用异常对象来表异常情况,遇到错误,如果异常对象未被捕捉或者处理,Python就会回溯,终止执行
2.异常可以在某些东西出错时自动引发,可以通过多种方法进行捕捉,从而避免程序失败
3.内建的异常类包括了绝大多数异常情况,但是有时候定制恰当的自定义异常类也是有必要的,异常类的创建与普通类的创建相同,只是需要继承Exception,不论是直接或者间接。
4.处理异常,try/except语句:
try:
x=input('Enter the first number:')
y=input('Enter the second number:')
print x/y
except ZeroDivisionError: #捕捉异常
print "The second number can not be zero!" #处理异常
5.在异常处理过程中,如果某语句发生异常而未被捕捉,则会将异常传递到语句所在代码块,如果还未处理则传递到所在函数,依此一路上传直至浮至最顶端,依然未处理则回溯终止程序
6.如果在处理过异常之后,依然想让异常传递上去(如上述异常处理方式只是打印错误信息,而未做任何修正,而假设修正程序在更上层,则有必要将异常传递上去),可以调用无参数的raise语句
7.同一个try后面可以接若干个except语句,每个except下接各自的处理异常的语句,这是因为设置了异常处理程序之后就只会检查符合异常类型的异常,而其余异常则会成为漏网之鱼被放过并导致错误出现;此外,多个异常也可放置在一条except语句中处理,except (ZeroDivisionError, NameError, TypeError): 如此,元组中三类异常均会被捕捉
8.在处理异常的过程中,也可以顺便记录下异常类型,只需要在except语句后增加一个参数e即可,except (ZeroDivisionError, NameError, TypeError), e:,如此,就可以将e打印出来而让用户知道到底触发了上述三种异常中的哪一种
9.有时候,很多异常是无法预测的,所以有时候的异常处理程序无法覆盖全部的可能异常,此时,应该在最后添加一句except Exception, e :用以涵盖全部异常
10.异常处理程序实际上是一种特殊的条件语句,except语句执行时代表异常条件满足从而触发,如果不满足则继续执行后续语句,如此,实际上也可以在except语句后添加else:语句,用以处理程序运行正常时的情况:
while True:
try:
x=input('Enter the first number:')
y=input('Enter the second number:')
print x/y
except ZeroDivisionError: #捕捉异常
print "The second number can not be zero!" #处理异常
else:
break
如此,上述循环只有在输入正常不触发异常时才会退出
11.Python中定义了finally关键词,用以在异常处理块中处理不论是否发生异常都必须执行的代码的需求:
x = None
try:
x=1/0
finally:
print "Cleaning up..."
del x
except Exception, e:
print "Error!"
上述代码段中finally段必定会被执行(此外,之所以在try之前定义x=None,是如果发生除0异常,则x就不会被赋值,那么之后finally语句中删除x就会发生异常,而此类异常时不会被捕捉和处理的,就会导致程序崩溃)
12.Python在函数中处理异常的方法实际上跟处理异常语句一样,都是try/except方式,不同的是,是在调用函数时采用上述语句,属于更上层的处理方式。