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 相关文章推荐
在Django的form中使用CSS进行设计的方法
Jul 18 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 Python
Python用 KNN 进行验证码识别的实现方法
Feb 06 Python
Tensorflow卷积神经网络实例进阶
May 24 Python
详解Python 协程的详细用法使用和例子
Jun 15 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
Python的Tkinter点击按钮触发事件的例子
Jul 19 Python
安装python及pycharm的教程图解
Oct 10 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
Python基础教程之输入输出和运算符
Jul 26 Python
Python 高效编程技巧分享
Sep 10 Python
python如何调用php文件中的函数详解
Dec 29 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数据代码
2008/06/05 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
2016/12/12 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python定时器使用示例分享
2014/02/16 Python
python 排序算法总结及实例详解
2016/09/28 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
python中count函数简单的实例讲解
2020/02/06 Python
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
报社实习生自荐信
2014/01/24 职场文书
军人违纪检讨书
2014/02/04 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
给校长的建议书200字
2014/05/16 职场文书
新书发布会策划方案
2014/06/09 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
村支部书记群众路线对照检查材料思想汇报
2014/10/08 职场文书
生死抉择观后感
2015/06/09 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏