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使用MySQLdb访问mysql数据库的方法
Aug 03 Python
Windows下搭建python开发环境详细步骤
Jul 20 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
Anaconda 离线安装 python 包的操作方法
Jun 11 Python
python实现内存监控系统
Mar 07 Python
详解python中的模块及包导入
Aug 30 Python
pytorch标签转onehot形式实例
Jan 02 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
Feb 12 Python
Python如何读写CSV文件
Aug 13 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 Python
python 如何执行控制台命令与操作剪切板
May 20 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学习笔记(三)操作符与控制结构
2011/08/06 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
JQuery 入门实例1
2009/06/25 Javascript
基于JQuery框架的AJAX实例代码
2009/11/03 Javascript
JavaScript 验证码的实例代码(附效果图)
2013/03/22 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
跟我学习javascript的var预解析与函数声明提升
2015/11/16 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
2019/07/10 jQuery
基于vue.js实现购物车
2020/01/15 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
Python列表解析配合if else的方法
2018/06/23 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
python3.4爬虫demo
2019/01/22 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
eBay德国站:eBay.de
2017/09/14 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
大学生职业规划书的范本
2014/02/18 职场文书
优秀护士先进事迹
2014/05/08 职场文书
科技之星事迹材料
2014/06/02 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
2015年见习期工作总结
2014/12/12 职场文书
国王的演讲观后感
2015/06/03 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python