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 相关文章推荐
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
Python遍历pandas数据方法总结
Feb 09 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
Linux下python3.7.0安装教程
Jul 30 Python
pycharm 在windows上编辑代码用linux执行配置的方法
Oct 27 Python
浅谈python下含中文字符串正则表达式的编码问题
Dec 07 Python
Python 实现数据结构中的的栈队列
May 16 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
Python yield的用法实例分析
Mar 06 Python
Python 添加文件注释和函数注释操作
Aug 09 Python
Jupyter Notebook安装及使用方法解析
Nov 12 Python
python 30行代码实现蚂蚁森林自动偷能量
Feb 08 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基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
JavaScript Accessor实现说明
2010/12/06 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
浅谈javascript的调试
2015/01/28 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
解决axios post 后端无法接收数据的问题
2019/10/29 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
2021/01/26 Vue.js
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
go和python调用其它程序并得到程序输出
2014/02/10 Python
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
详解Python核心对象类型字符串
2018/02/11 Python
浅谈Python的list中的选取范围
2018/11/12 Python
python获取中文字符串长度的方法
2018/11/14 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
彪马西班牙官网:PUMA西班牙
2019/06/18 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
英文版餐饮运营管理求职信
2013/11/06 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
新学期开学演讲稿
2014/05/24 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书
如何用python插入独创性声明
2021/03/31 Python