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下10个简单实例代码
Nov 15 Python
Python enumerate索引迭代代码解析
Jan 19 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
Python如何基于smtplib发不同格式的邮件
Dec 30 Python
Pytorch之finetune使用详解
Jan 18 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
Jun 15 Python
Python错误的处理方法
Jun 23 Python
Python尾递归优化实现代码及原理详解
Oct 09 Python
Anaconda的安装与虚拟环境建立
Nov 18 Python
python模块内置属性概念及实例
Feb 18 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 join函数应用
2011/05/04 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
PHP实现批量删除(封装)
2017/04/28 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
Python pass详细介绍及实例代码
2016/11/24 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
HTML5图片预览实例分享
2014/06/04 HTML / CSS
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
关工委先进个人事迹材料
2014/05/23 职场文书
三方股东合作协议书
2014/10/28 职场文书
民主评议党员个人总结
2015/02/13 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
Redis Cluster 集群搭建你会吗
2021/08/04 Redis
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js