Python中捕捉详细异常信息的代码示例


Posted in Python onSeptember 18, 2014

大家在开发的过程中可能时常碰到一个需求,需要把Python的异常信息输出到日志文件中。
网上的办法都不太实用,下面介绍一种实用的,从Python 2.7源码中扣出来的。
废话不说 直接上代码,代码不多,注释比较多而已。

import sys, traceback

traceback_template = '''Traceback (most recent call last):
 File "%(filename)s", line %(lineno)s, in %(name)s
%(type)s: %(message)s\n''' # Skipping the "actual line" item

# Also note: we don't walk all the way through the frame stack in this example
# see hg.python.org/cpython/file/8dffb76faacc/Lib/traceback.py#l280
# (Imagine if the 1/0, below, were replaced by a call to test() which did 1/0.)

try:
  1/0
except:
  # http://docs.python.org/2/library/sys.html#sys.exc_info
  exc_type, exc_value, exc_traceback = sys.exc_info() # most recent (if any) by default

  '''
  Reason this _can_ be bad: If an (unhandled) exception happens AFTER this,
  or if we do not delete the labels on (not much) older versions of Py, the
  reference we created can linger.

  traceback.format_exc/print_exc do this very thing, BUT note this creates a
  temp scope within the function.
  '''

  traceback_details = {
             'filename': exc_traceback.tb_frame.f_code.co_filename,
             'lineno' : exc_traceback.tb_lineno,
             'name'  : exc_traceback.tb_frame.f_code.co_name,
             'type'  : exc_type.__name__,
             'message' : exc_value.message, # or see traceback._some_str()
            }

  del(exc_type, exc_value, exc_traceback) # So we don't leave our local labels/objects dangling
  # This still isn't "completely safe", though!
  # "Best (recommended) practice: replace all exc_type, exc_value, exc_traceback
  # with sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2]


  ## 修改这里就可以把traceback打到任意地方,或者存储到文件中了
  print traceback_template % traceback_details
Python 相关文章推荐
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
python 实现查找文件并输出满足某一条件的数据项方法
Jun 12 Python
pygame实现俄罗斯方块游戏(AI篇1)
Oct 29 Python
pytorch sampler对数据进行采样的实现
Dec 31 Python
Python实现实时数据采集新型冠状病毒数据实例
Feb 04 Python
python随机模块random使用方法详解
Feb 14 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 Python
Python学习之time模块的基本使用
Jan 17 Python
用python删除文件夹中的重复图片(图片去重)
May 12 Python
pytorch训练神经网络爆内存的解决方案
May 22 Python
python字符串连接的N种方式总结
Sep 17 #Python
Python实现的检测web服务器健康状况的小程序
Sep 17 #Python
python写的一个squid访问日志分析的小程序
Sep 17 #Python
python进程管理工具supervisor使用实例
Sep 17 #Python
Python实现备份文件实例
Sep 16 #Python
Python多进程编程技术实例分析
Sep 16 #Python
Python专用方法与迭代机制实例分析
Sep 15 #Python
You might like
PHP的宝库目录--PEAR
2006/10/09 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
浅谈php和.net的区别
2014/09/28 PHP
PHP curl使用实例
2015/07/02 PHP
php数据序列化测试实例详解
2017/08/12 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
实例讲解Python中函数的调用与定义
2016/03/14 Python
Python Xml文件添加字节属性的方法
2018/03/31 Python
python获取时间及时间格式转换问题实例代码详解
2018/12/06 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
利用python开发app实战的方法
2019/07/09 Python
python标记语句块使用方法总结
2019/08/05 Python
python django生成迁移文件的实例
2019/08/31 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
介绍一下Mysql的存储引擎
2015/02/12 面试题
办公室文秘岗位职责
2013/11/15 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
宝宝满月酒主持词和仪式流程
2014/03/27 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
员工保密承诺书
2014/05/28 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
异地年检委托书范本
2014/09/24 职场文书
刑事上诉状(量刑过重)
2015/05/23 职场文书
HR必备:超全面的薪酬待遇管理方案!
2019/07/12 职场文书
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python