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实现大文件排序的方法
Jul 10 Python
Python 3中的yield from语法详解
Jan 18 Python
Python求出0~100以内的所有素数
Jan 23 Python
Python实现使用request模块下载图片demo示例
May 24 Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 Python
详细介绍Python进度条tqdm的使用
Jul 31 Python
python web框架 django wsgi原理解析
Aug 20 Python
python向图片里添加文字
Nov 26 Python
Python字符编码转码之GBK,UTF8互转
Feb 09 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
python获取系统内存占用信息的实例方法
Jul 17 Python
在python中实现导入一个需要传参的模块
May 12 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
推荐文章系统(一)
2006/10/09 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
php对csv文件的读取,写入,输出下载操作详解
2013/08/10 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
Jquery显示、隐藏元素以及添加删除样式
2013/08/09 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
javascript标准库(js的标准内置对象)总结
2018/05/26 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
python实现线程池的方法
2015/06/30 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
python障碍式期权定价公式
2019/07/19 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
HTML5 Web 存储详解
2016/09/16 HTML / CSS
好军嫂事迹材料
2014/01/15 职场文书
导师推荐信范文
2014/05/09 职场文书
2014年财务人员工作总结
2014/11/11 职场文书
2014年班级工作总结
2014/11/14 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
《三国志》赏析
2019/08/27 职场文书
AI:如何训练机器学习的模型
2021/04/16 Python
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js