Python爬虫、数据分析与可视化:工具详解与案例实战
上QQ阅读APP看书,第一时间看更新

4.1.4 在处理异常时引入else代码块

和Java等异常处理机制不同,在Python里还可以在try…except从句里引入else代码块。具体来讲,如果没有发生异常,则会进入else处理流程。在如下的TryElseDemo.py范例中,我们将演示相关的做法。


01 # coding=utf-8
02 empIDList = ['1','2']
03 try:
04     print(empIDList[2]) # 索引出错触发异常
05 except IndexError:
06     print('Index Error')
07 else:
08     print('continue, no Exception')
09 try:
10     1/0 # 除零异常,其实并没有被正确捕获处理
11 except TypeError:
12     print('Type Error in devided 0') # 不会进入
13 # except ZeroDivisionError:
14 #   print('ZeroDivision Error') # 会输出该语句
15 else:
16     print('1/0,continue, no Exception') # 会终止程序,不会执行else
17 print('continue, out of try...except') # 不会执行这句

在第3行的try从句里,我们正确地使用了索引,没有抛出异常,所以会进入第7行的else处理流程。在第9行的try从句里抛出的除零异常,由于我们注释掉了第13行和第14行的代码,因此并没有被except从句处理,此时不是进入else流程,而是直接退出。

由此我们能看到else从句被触发的条件:只有当try从句里并没有发生异常才会进入,如果发生异常,哪怕异常没被异常处理类处理,也不会进入else流程。