异常处理
#出现异常怎办?
#就如我们使用的工具出了点小毛病,我们可以想办法修理好它。程序也是一样,前辈们经过不断积累和思考,创造了不少好方法处理程序中的异常,最简单的是使用try语句处理。
#try语句的基本形式为try/except。try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。如果你不想在发生异常时结束程序,只需在try语句块中捕获异常即可。
#捕获异常的语法如下:
1 try: 2 <语句> 运行别的代码 3 except<名字>: 4 <语句> #如果在try部分引发了异常
#try的工作原理是,开始一个try语句后,Python就在当前程序的上下文中做标记,当出现异常时就可以回到做标记的地方。首先执行try子句,接下来发生什么依赖于执行时是否出现异常。
#如果try后的语句执行时发生异常,程序就跳回try并执行except子句。异常处理完毕,控制流就可以通过整个try语句了(除非在处理异常时又引发新异常)。
#如以下示例:
1 #!/usr/bin/python3 2 #-*-coding:UTF-8-*- 3 #异常 4 5 def exp_exception(x,y): 6 try: 7 a=x/y 8 print('a=',a) 9 return a 10 except Exception: 11 print('程序出现异常,异常信息:被除数为0') 12 13 exp_exception(2,0)
#程序执行结果如下:
1 D:\Python\workspace\datatime\20171218>python 异常.py 2 程序出现异常,异常信息:被除数为0
#由执行结果看到,程序最后执行的是except子句,如果语句正常,应该输出'a='的形式。
#这里就会有疑问了,直接在做除法前对y值进行判断不就解决问题了,何必使用try/except语句呢?
#在本例中这么做确实更好一些。如果给程序加入更多除法,就得给每个除法语句加一个判断语句,这样整个代码看上去就是一堆类似if的功能重复判断语句,真正有效的代码没多少。而使用try/except只需要一个错误处理器即可。
#如果没有处理异常,异常就会被”传播“到调用的函数中。如果在调用的函数中依然没有处理,异常就会继续“传播”,直到程序的最顶层。也就是可以处理其他人程序中未处理的异常,