Dotcpp  >  编程教程  >  Python异常处理和程序调试  >  Python异常处理语句try…except实例详解二

Python异常处理语句try…except实例详解二

点击打开在线编译器,边学边练

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语句并没执行,这些语句的区分难度并不大,大家可以通过例子去练习一下这几种常用的异常处理语句。



本文固定URL:https://www.dotcpp.com/course/276

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Python教程
第一章 Python入门
第二章 Python基础语法
第三章 Python入门语法
第四章 Python核心语法
第五章 Python函数
第六章 Python面向对象编程
第七章 Python模块
第八章 Python异常处理和程序调试
第九章 Python文件及目录操作
第十章 PythonGUI编程
第十一章 Python进程和线程
第十二章 Python数据库管理
第十三章 Python算法
第十四章 Python爬虫
第十五章 Python实战项目
第十六章 后记
Dotcpp在线编译      (登录可减少运行等待时间)