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使用正则匹配实现抓图代码分享
Apr 02 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
Python+Django搭建自己的blog网站
Mar 13 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
Python找出微信上删除你好友的人脚本写法
Nov 01 Python
Python的iOS自动化打包实例代码
Nov 22 Python
python 处理数字,把大于上限的数字置零实现方法
Jan 28 Python
详解如何管理多个Python版本和虚拟环境
May 10 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
Python select及selectors模块概念用法详解
Jun 22 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 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 常用类汇总 推荐收藏
2010/05/13 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
2014/09/24 PHP
cakephp常见知识点汇总
2017/02/24 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
JavaScript QueryString解析类代码
2010/01/17 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
VUE实时监听元素距离顶部高度的操作
2020/07/29 Javascript
小程序实现密码输入框
2020/11/16 Javascript
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
Python 如何测试文件是否存在
2020/07/31 Python
python regex库实例用法总结
2021/01/03 Python
介绍一下grep命令的使用
2015/06/12 面试题
护理专业自荐信
2013/12/03 职场文书
庆八一活动方案
2014/01/25 职场文书
党校培训自我鉴定
2014/02/01 职场文书
2014中考励志标语
2014/06/05 职场文书
最新离婚协议书范本
2014/08/19 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL