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中dir函数用法分析
Apr 17 Python
Python循环语句之break与continue的用法
Oct 14 Python
Pyinstaller将py打包成exe的实例
Mar 31 Python
儿童学习python的一些小技巧
May 27 Python
使用pip发布Python程序的方法步骤
Oct 11 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
Jan 14 Python
Python开启线程,在函数中开线程的实例
Feb 22 Python
Python流程控制 if else实现解析
Sep 02 Python
Python计算两个矩形重合面积代码实例
Sep 16 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
python离线安装外部依赖包的实现
Feb 13 Python
python tqdm实现进度条的示例代码
Nov 10 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 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
php检测url是否存在的方法
2015/04/14 PHP
php截取视频指定帧为图片
2016/05/16 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
jquery链式操作的正确使用方法
2014/01/06 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
python函数形参用法实例分析
2015/08/04 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
python从Oracle读取数据生成图表
2020/10/14 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
应届生护士求职信
2013/11/01 职场文书
军训教官感言
2014/03/02 职场文书
校园环保广播稿(3篇)
2014/09/15 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
圣诞晚会主持词
2015/07/01 职场文书
python内置进制转换函数的操作
2021/06/02 Python