Python try except else使用详解


Posted in Python onJanuary 12, 2021

在原本的try except结构的基础上,Python 异常处理机制还提供了一个 else 块,也就是原有 try except 语句的基础上再添加一个 else 块,即try except else结构。

使用 else 包裹的代码,只有当 try 块没有捕获到任何异常时,才会得到执行;反之,如果 try 块捕获到异常,即便调用对应的 except 处理完异常,else 块中的代码也不会得到执行。

举个例子:

try:
  result = 20 / int(input('请输入除数:'))
  print(result)
except ValueError:
  print('必须输入整数')
except ArithmeticError:
  print('算术错误,除数不能为 0')
else:
  print('没有出现异常')
print("继续执行")

可以看到,在原有 try except 的基础上,我们为其添加了 else 块。现在执行该程序:
请输入除数:4
5.0
没有出现异常
继续执行

如上所示,当我们输入正确的数据时,try 块中的程序正常执行,Python 解释器执行完 try 块中的程序之后,会继续执行 else 块中的程序,继而执行后续的程序。

读者可能会问,既然 Python 解释器按照顺序执行代码,那么 else 块有什么存在的必要呢?直接将 else 块中的代码编写在 try except 块的后面,不是一样吗?

当然不一样,现在再次执行上面的代码:
请输入除数:a
必须输入整数
继续执行

可以看到,当我们试图进行非法输入时,程序会发生异常并被 try 捕获,Python 解释器会调用相应的 except 块处理该异常。但是异常处理完毕之后,Python 解释器并没有接着执行 else 块中的代码,而是跳过 else,去执行后续的代码。

也就是说,else 的功能,只有当 try 块捕获到异常时才能显现出来。在这种情况下,else 块中的代码不会得到执行的机会。而如果我们直接把 else 块去掉,将其中的代码编写到 try except 的后面:

try:
  result = 20 / int(input('请输入除数:'))
  print(result)
except ValueError:
  print('必须输入整数')
except ArithmeticError:
  print('算术错误,除数不能为 0')
print('没有出现异常')
print("继续执行")

程序执行结果为:
请输入除数:a
必须输入整数
没有出现异常
继续执行

可以看到,如果不使用 else 块,try 块捕获到异常并通过 except 成功处理,后续所有程序都会依次被执行。

python  try except else finally 实例

class AError(Exception):
  """AError---exception"""
  print('AError')

class BError(Exception):
  """BError---exception"""
  print('BError')

try:
  # raise AError
  # raise BError
  aaaaa()
except AError:
  print("Get AError")
except BError:
  print("Get BError")
except:
  print("Get Exception")
else:
  print("do else")
finally:
  print("finally")

1.在上面所示的完整语句中try/except/else/finally所出现的顺序必须是try-->except X-->except-->else-->finally,即所有的except必须在else和finally之前,else(如果有的话)必须在finally之前,而except X必须在except之前。否则会出现语法错误。

2.在上面的完整语句中,else语句的存在必须以except X或者except语句为前提,如果在没有except语句的try block中使用else语句会引发语法错误。也就是说else不能与try/finally配合使用。

3.try成功进else,不成功进对应的except;

4.不论是否成功except X,except的判定语句都会执行,只是不进入;对应到以上程序就是不论哪种情况 AError BError都会打印,但是Get AError Get BError 只有抛对应的异常时才会打印。

5.finally所有情况都会执行,可以不写,写了就必须在所有except else等之后;

到此这篇关于Python try except else使用详解的文章就介绍到这了,更多相关Python try except else内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Python 相关文章推荐
python网络编程学习笔记(六):Web客户端访问
Jun 09 Python
Python内置的字符串处理函数详细整理(覆盖日常所用)
Aug 19 Python
Python中的super()方法使用简介
Aug 14 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
详解Python nose单元测试框架的安装与使用
Dec 20 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
Jun 26 Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 Python
python traceback捕获并打印异常的方法
Aug 31 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
Jan 18 Python
Python while循环使用else语句代码实例
Feb 07 Python
python 逆向爬虫正确调用 JAR 加密逻辑
Jan 12 #Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
Jan 12 #Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 #Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 #Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 11 #Python
python用分数表示矩阵的方法实例
Jan 11 #Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 #Python
You might like
PHP_MySQL教程-第一天
2007/03/18 PHP
基于PHP文件操作的详细诠释
2013/06/21 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
JQery 渐变图片导航效果代码 漂亮
2010/01/01 Javascript
JavaScript 原型学习总结
2010/10/29 Javascript
js特殊字符过滤的示例代码
2014/03/05 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
python使用opencv进行人脸识别
2017/04/07 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
python实现代码统计程序
2019/09/19 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
Python脚本去除文件的只读性操作
2020/03/05 Python
如何理解Python中包的引入
2020/05/29 Python
Python如何自动获取目标网站最新通知
2020/06/18 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
AJAX的全称是什么
2012/11/06 面试题
入党转预备思想汇报
2014/01/07 职场文书
百年校庆节目主持词
2014/03/27 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers