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的Django框架生成PDF文件的教程
Jul 22 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
python交互式图形编程实例(三)
Nov 17 Python
Python同步遍历多个列表的示例
Feb 19 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
Apache部署Django项目图文详解
Jul 30 Python
python中自带的三个装饰器的实现
Nov 08 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
Dec 27 Python
Python 简单计算要求形状面积的实例
Jan 18 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
如何在mac版pycharm选择python版本
Jul 21 Python
pytorch下的unsqueeze和squeeze的用法说明
Feb 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
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
php使用Imagick生成图片的方法
2015/07/31 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
Python获取文件ssdeep值的方法
2014/10/05 Python
Python易忽视知识点小结
2015/05/25 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
python交换两个变量的值方法
2019/01/12 Python
对Python之gzip文件读写的方法详解
2019/02/08 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
保送生自荐信范文
2013/10/06 职场文书
城管个人总结
2015/02/28 职场文书
接待员岗位职责范本
2015/04/15 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript