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 字符串操作方法大全
Mar 11 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
Aug 22 Python
python 实现检验33品种数据是否是正态分布
Dec 09 Python
Python 实现训练集、测试集随机划分
Jan 08 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 Python
pycharm实现print输出保存到txt文件
Jun 01 Python
python中取绝对值简单方法总结
Jul 24 Python
详解pytorch tensor和ndarray转换相关总结
Sep 03 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 Python
python+pytest接口自动化之token关联登录的实现
Apr 06 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 URL验证正则表达式
2011/07/19 PHP
Memcached常用命令以及使用说明详解
2013/06/27 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
CSDN轮换广告图片轮换效果
2007/03/27 Javascript
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
Javascript 圆角div的实现代码
2009/10/15 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
Oracle里面常用的数据字典有哪些
2014/02/14 面试题
六查六看剖析材料
2014/02/15 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
POST提交数据常见的四种方式
2022/01/18 HTML / CSS