1. try...except语句的嵌套
这种语句就是多except语句的多处理方式,下面我们通过一个例题来学习一下try...except的语句嵌套。
def test(): n = int(input('有3个语句需要测试,请选择(1/2/3):')) if n == 1:#keyError异常情况 my_dict = {'dotcpp': 123} print(my_dict['dot']) elif n == 2:#IndexError异常 my_list = [1, 2, 3, 4, 5] print(my_list[100]) elif n == 3:#NameError异常 print('不存在的变量dotcpp:', dotcpp) try: try: try: test() except KeyError: print('KeyError异常') except IndexError: print('IndexError异常') except NameError: print('NameError异常')
我们分别测试1/2/3,输出结果如下:
有3个语句需要测试,请选择(1/2/3):1 KeyError异常 有3个语句需要测试,请选择(1/2/3):2 IndexError异常 有3个语句需要测试,请选择(1/2/3):3 NameError异常
在这个例题中,我们首先在定义的函数中输入一个判断量n,然后根据n的值给出了三种异常的情况,然后我们在最后嵌套了3个try..except语句,也就是说test()语句的结果会经过三层判断。
2. try...except...finally语句
一个完整的异常处理机制是离不开finally语句的,这个语句的作用是不管我们的程序中是否有异常发生,finally语句下的代码都会被执行,它的语法格式为:
try: block except [typeerror]: deal1 finally: deal2
我们通过一个例子来看一下这种结构:
def test(): n = int(input('请输入一个整数:')) print(n) try: test() except KeyError: print('KeyError异常') finally: print('finally语句已执行')
我们分别输入6和dotcpp来看一下输出结果:
请输入一个整数:5 5 finally语句已执行 请输入一个整数:dotcpp finally语句已执行 Traceback (most recent call last): File "C:/Users/test.py", line 5, in <module> test() File "C:/Users/test.py", line 2, in test n = int(input('请输入一个整数:')) ValueError: invalid literal for int() with base 10: 'dotcpp'
通过这个例子我们可以看出,无论我们的程序是否出现异常,finally语句都会执行。
3. try...except...else语句
我们在上面学习的finally语句是无论语句是否发生异常都会执行的语句,下面我们来学习的try...except...else语句当程序中未发生异常的时候才会执行,它的语法结构为:
try: block except [typeerror ]: deal1 else: deal2
下面我们看例子:
def test(): n = int(input('请输入一个整数:')) print('输入值为:',n) try: test() except ValueError: print('ValueError异常') else: print('当前程序未出现异常')
输出结果为:
请输入一个整数:5 输入值为: 5 当前程序未出现异常
当我们输入值为dotcpp时
请输入一个整数:dotcpp ValueError异常
我们可以看出当程序异常的时候else语句并没执行,这些语句的区分难度并不大,大家可以通过例子去练习一下这几种常用的异常处理语句。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程