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在linux系统下获取系统内存使用情况的方法
May 11 Python
使用Python对Excel进行读写操作
Mar 30 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
Apr 24 Python
python中实现精确的浮点数运算详解
Nov 02 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
使用Python对微信好友进行数据分析
Jun 27 Python
详解python读取和输出到txt
Mar 29 Python
Django的性能优化实现解析
Jul 30 Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
python3 实现mysql数据库连接池的示例代码
Apr 17 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 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 pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
学习YUI.Ext基础第一天
2007/03/10 Javascript
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
requirejs + vue 项目搭建详解
2017/06/16 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
Node对CommonJS的模块规范
2019/11/06 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
python实现二分查找算法
2017/09/21 Python
Python找出最小的K个数实例代码
2018/01/04 Python
Python装饰器的执行过程实例分析
2018/06/04 Python
python pandas 如何替换某列的一个值
2018/06/09 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
支教自我鉴定
2014/01/18 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
汇源肾宝广告词
2014/03/20 职场文书
土地转让协议书
2014/04/15 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
大四学生个人总结
2015/02/15 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
社会实践心得体会范文
2016/01/14 职场文书
python双向链表实例详解
2022/05/25 Python