Python 捕获代码中所有异常的方法


Posted in Python onAugust 03, 2020

问题

怎样捕获代码中的所有异常?

解决方案

想要捕获所有的异常,可以直接捕获 Exception 即可:

try:
  ...
except Exception as e:
  ...
  log('Reason:', e)    # Important!

这个将会捕获除了 SystemExitKeyboardInterruptGeneratorExit 之外的所有异常。 如果你还想捕获这三个异常,将 Exception 改成 BaseException 即可。

讨论

捕获所有异常通常是由于程序员在某些复杂操作中并不能记住所有可能的异常。 如果你不是很细心的人,这也是编写不易调试代码的一个简单方法。

正因如此,如果你选择捕获所有异常,那么在某个地方(比如日志文件、打印异常到屏幕)打印确切原因就比较重要了。 如果你没有这样做,有时候你看到异常打印时可能摸不着头脑,就像下面这样:

def parse_int(s):
  try:
    n = int(v)
  except Exception:
    print("Couldn't parse")

试着运行这个函数,结果如下:

>>> parse_int('n/a')
Couldn't parse
>>> parse_int('42')
Couldn't parse
>>>

这时候你就会挠头想:“这咋回事啊?” 假如你像下面这样重写这个函数:

def parse_int(s):
  try:
    n = int(v)
  except Exception as e:
    print("Couldn't parse")
    print('Reason:', e)

这时候你能获取如下输出,指明了有个编程错误:

>>> parse_int('42')
Couldn't parse
Reason: global name 'v' is not defined
>>>

很明显,你应该尽可能将异常处理器定义的精准一些。 不过,要是你必须捕获所有异常,确保打印正确的诊断信息或将异常传播出去,这样不会丢失掉异常。

以上就是Python 捕获代码中所有异常的方法的详细内容,更多关于Python 捕获异常的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中__new__与__init__方法的区别详解
May 04 Python
Python实现的桶排序算法示例
Nov 29 Python
python对象与json相互转换的方法
May 07 Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 Python
python web框架中实现原生分页
Sep 08 Python
Python猴子补丁知识点总结
Jan 05 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
Mar 23 Python
新建文件时Pycharm中自动设置头部模板信息的方法
Apr 17 Python
PyCharm 2020.2 安装详细教程
Sep 25 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
用Python selenium实现淘宝抢单机器人
Jun 18 Python
opencv检测动态物体的实现
Jul 21 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 #Python
Python pip使用超时问题解决方案
Aug 03 #Python
python时间序列数据转为timestamp格式的方法
Aug 03 #Python
python3 中使用urllib问题以及urllib详解
Aug 03 #Python
Python txt文件常用读写操作代码实例
Aug 03 #Python
Python连接Mysql进行增删改查的示例代码
Aug 03 #Python
Python如何在单元测试中给对象打补丁
Aug 03 #Python
You might like
PHP date函数参数详解
2006/11/27 PHP
php定界符
2014/06/19 PHP
php实现可运算的验证码
2015/11/10 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
PHP+MySQL存储数据常见中文乱码问题小结
2016/06/13 PHP
php实现学生管理系统
2020/03/21 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
jQuery each()小议
2010/03/18 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
H5+C3+JS实现双人对战五子棋游戏(UI篇)
2020/05/28 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
使用pdb模块调试Python程序实例
2015/06/02 Python
详解Django中Request对象的相关用法
2015/07/17 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
Python @property装饰器原理解析
2020/01/22 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
2020/11/20 Python
python 基于opencv实现图像增强
2020/12/23 Python
医学毕业生自荐信
2013/10/11 职场文书
财务经理岗位职责
2013/11/09 职场文书
销售人员求职的自我评价分享
2014/03/15 职场文书
促销活动计划书
2014/05/02 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
运动会报道稿大全
2015/07/23 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript
Redis中一个String类型引发的惨案
2021/07/25 Redis
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle