上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流程。