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函数帮助查询小工具
Mar 13 Python
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 Python
Python 绘图和可视化详细介绍
Feb 11 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
Apr 18 Python
python设置值及NaN值处理方法
Jul 03 Python
python实现自动登录
Sep 17 Python
Python二进制文件读取并转换为浮点数详解
Jun 25 Python
OpenCV 轮廓检测的实现方法
Jul 03 Python
Django如何实现上传图片功能
Aug 16 Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 Python
python编写softmax函数、交叉熵函数实例
Jun 11 Python
Python OpenCV之常用滤波器使用详解
Apr 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 PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
Jquery带搜索框的下拉菜单
2013/05/06 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
Python实现获取域名所用服务器的真实IP
2015/10/25 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
Django实现自定义404,500页面教程
2017/03/26 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
python 检查文件mime类型的方法
2018/12/08 Python
代码详解django中数据库设置
2019/01/28 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
python实现图片压缩代码实例
2019/08/12 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
工程管理造价应届生求职信
2013/11/13 职场文书
心得体会范文
2014/01/04 职场文书
中秋节超市促销方案
2014/01/30 职场文书
幼儿园数学教学反思
2014/02/02 职场文书
党员四风自我剖析材料
2014/10/07 职场文书
电影红河谷观后感
2015/06/11 职场文书