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 相关文章推荐
Python3.x和Python2.x的区别介绍
Feb 12 Python
Python通过解析网页实现看报程序的方法
Aug 04 Python
python使用any判断一个对象是否为空的方法
Nov 19 Python
python实现文件路径和url相互转换的方法
Jul 06 Python
python 线程的暂停, 恢复, 退出详解及实例
Dec 06 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
Jul 17 Python
PHP基于phpqrcode类库生成二维码过程解析
May 28 Python
浅谈Django前端后端值传递问题
Jul 15 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 Python
用Python爬虫破解滑动验证码的案例解析
May 06 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 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
php导出word格式数据的代码实例
2013/11/25 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
小议Javascript中的this指针
2010/03/18 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
jQuery事件绑定与解除绑定实现方法
2015/04/15 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
javascript+HTML5 canvas绘制时钟功能示例
2019/05/15 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
vue调用语音播放的方法
2019/09/27 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
Python functools模块学习总结
2015/05/09 Python
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
在双python下设置python3为默认的方法
2018/10/31 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
python numpy中cumsum的用法详解
2019/10/17 Python
Python实现打印实心和空心菱形
2019/11/23 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
临床医师专业个人自我评价范文
2013/11/07 职场文书
大四学生思想汇报
2014/01/13 职场文书
事业单位年度考核评语
2014/12/31 职场文书
领导欢送会主持词
2015/07/06 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript
Python数据处理的三个实用技巧分享
2022/04/01 Python