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 相关文章推荐
python 装饰器功能以及函数参数使用介绍
Jan 27 Python
Python使用urllib2获取网络资源实例讲解
Dec 02 Python
复习Python中的字符串知识点
Apr 14 Python
Python 转义字符详细介绍
Mar 21 Python
python微信跳一跳系列之棋子定位颜色识别
Feb 26 Python
python的sorted用法详解
Jun 25 Python
通过Python编写一个简单登录功能过程解析
Sep 04 Python
python两个_多个字典合并相加的实例代码
Dec 26 Python
Python生成器常见问题及解决方案
Mar 21 Python
python如何求100以内的素数
May 27 Python
如何使用scrapy中的ItemLoader提取数据
Sep 30 Python
python中pycryto实现数据加密
Apr 29 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
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
微信支付的开发流程详解
2016/09/13 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
jQuery 三击事件实现代码
2013/09/11 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
干货!教大家如何选择Vue和React
2017/03/13 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
Vue组件生命周期运行原理解析
2020/11/25 Vue.js
[00:32]2018DOTA2亚洲邀请赛Liquid出场
2018/04/03 DOTA
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
python实现统计代码行数的方法
2015/05/22 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
python安装本地whl的实例步骤
2019/10/12 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
python数据类型强制转换实例详解
2020/06/22 Python
新学期家长寄语
2014/01/19 职场文书
企业内控岗位的职责
2014/02/07 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
高三英语复习计划
2015/01/19 职场文书
党员年终个人总结
2015/02/14 职场文书
大学生军训感言
2015/08/01 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
python自动化测试通过日志3分钟定位bug
2021/11/20 Python
vue判断按钮是否可以点击
2022/04/09 Vue.js