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装饰器 免去调用父类构造函数的麻烦
May 18 Python
Python time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
python搭建虚拟环境的步骤详解
Sep 27 Python
详谈python3中用for循环删除列表中元素的坑
Apr 19 Python
我用Python抓取了7000 多本电子书案例详解
Mar 25 Python
python网络应用开发知识点浅析
May 28 Python
flask框架路由常用定义方式总结
Jul 23 Python
Python计算两个矩形重合面积代码实例
Sep 16 Python
python实现树的深度优先遍历与广度优先遍历详解
Oct 26 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
使用Django搭建网站实现商品分页功能
May 22 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 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中的reflection反射机制测试例子
2014/08/05 PHP
php类的定义与继承用法实例
2015/07/07 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
关于Javascript 的 prototype问题。
2007/01/03 Javascript
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
2014/11/23 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
JS中对Cookie的操作详解
2016/08/05 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
Python3实现Web网页图片下载
2016/01/28 Python
pycharm设置注释颜色的方法
2018/05/23 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
关于Java String的一道面试题
2013/09/29 面试题
文秘人员工作职责
2014/01/31 职场文书
美术教师自我鉴定
2014/02/12 职场文书
Html分层的box-shadow效果的示例代码
2021/03/30 HTML / CSS
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
Python语言中的数据类型-序列
2022/02/24 Python
MySQL视图概念以及相关应用
2022/04/19 MySQL
JavaScript中reduce()的用法
2022/05/11 Javascript
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技