上QQ阅读APP看书,第一时间看更新
4.1.2 使用异常处理类
一旦发生异常,就会进入except处理流程,此时Python的异常处理类会处理异常。在上例中,except后面没有指定处理类,会默认地采用Exception这个常规异常处理类的基类来处理。
此外还有诸如处理迭代器异常的StopIteration和处理访问序列时索引错误的IndexError类。在表4.1里,列出了常用异常处理类及其适用场景。
表4.1 常用异常处理类
也就是说,在except后面,我们还可以指定处理异常的类。在如下的ExceptionDemo.py范例中,我们将看到这种做法。
01 # coding=utf-8 02 empIDList = ['1','2'] 03 try: 04 print(empIDList[3]) # 索引出错触发异常 05 except IndexError: 06 print('Index Error') 07 print('continue') # 异常得到处理,能执行该句打印 08 try: 09 100+'$' # 函数参数类型错误 10 except TypeError: 11 print('Type Error') 12 try: 13 1/0 # 除零异常 14 except TypeError: 15 print('Type Error in devided 0') # 不会进入 16 except ZeroDivisionError: 17 print('ZeroDivision Error') # 会输出该句语句
在第3行和第4行的try从句里,由于访问列表时索引越界,因此会进入第5行的except处理流程,由IndexError类来处理异常。在第9行,加号操作符要么两边都是数字,要么都是字符串,所以会导致函数参数类型出错的异常,从而进入第11行的处理流程。
注意,针对第13行的除零异常,我们用第14行和第16行的两个except从句来处理,它们所带有的异常处理类不同。从运行结果来看,只是进入第16行的ZeroDivisionError处理流程,并没有进入第14行。
也就是说,一旦在try从句里出现异常,该异常就会被对应的异常处理类处理,而不会进入带有不相关异常处理类的except从句。