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中的自省(反射)详解
Jun 02 Python
详解Python各大聊天系统的屏蔽脏话功能原理
Dec 01 Python
python的mysqldb安装步骤详解
Aug 14 Python
python利用smtplib实现QQ邮箱发送邮件
May 20 Python
对matplotlib改变colorbar位置和方向的方法详解
Dec 13 Python
django创建超级用户过程解析
Sep 18 Python
Python流程控制常用工具详解
Feb 24 Python
什么是python的列表推导式
May 26 Python
python 用Matplotlib作图中有多个Y轴
Nov 28 Python
Python实现微信表情包炸群功能
Jan 28 Python
Python的flask接收前台的ajax的post数据和get数据的方法
Apr 12 Python
深入理解python多线程编程
Apr 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实现分页工具类分享
2014/01/09 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
原生JS实现ajax与ajax的跨域请求实例
2017/12/01 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
js实现随机数小游戏
2019/06/28 Javascript
QML实现圆环颜色选择器
2019/09/25 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
2020/05/15 Javascript
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
Python下载网络小说实例代码
2018/02/03 Python
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
python操作mysql代码总结
2018/06/01 Python
在python中使用nohup命令说明
2020/04/16 Python
python字典的值可以修改吗
2020/06/29 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
逻辑链路控制协议
2016/10/01 面试题
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
业务总经理岗位职责
2014/02/03 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
青年文明号汇报材料
2014/12/23 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书
python ansible自动化运维工具执行流程
2021/06/24 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
聊聊SpringBoot自动装配的魔力
2021/11/17 Java/Android
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang