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框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
python实现web方式logview的方法
Aug 10 Python
Python科学计算之Pandas详解
Jan 15 Python
让python 3支持mysqldb的解决方法
Feb 14 Python
Python基于pygame模块播放MP3的方法示例
Sep 30 Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
Apr 18 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
Jun 24 Python
华为2019校招笔试题之处理字符串(python版)
Jun 25 Python
python使用socket实现的传输demo示例【基于TCP协议】
Sep 24 Python
使用python的turtle绘画滑稽脸实例
Nov 21 Python
keras的load_model实现加载含有参数的自定义模型
Jun 22 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
再次研究下cache_lite
2007/02/14 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
thinkPHP中session()方法用法详解
2016/12/08 PHP
javascript之对系统的toFixed()方法的修正
2007/05/08 Javascript
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
python连接MySQL数据库实例分析
2015/05/12 Python
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
Python模块搜索概念介绍及模块安装方法介绍
2015/06/03 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
Python语言进阶知识点总结
2019/05/28 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
HTML5之SVG 2D入门3—文本与图像及渲染文本介绍
2013/01/30 HTML / CSS
Otel.com:折扣酒店预订
2017/08/24 全球购物
新西兰最大、占有率最高的综合性药房:PharmacyDirect药房中文网
2020/11/03 全球购物
简单说说tomcat的配置
2013/05/28 面试题
学生党员思想汇报范文
2014/01/09 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
2014年德育工作总结
2014/11/20 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL