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 30 Python
Python中if elif else及缩进的使用简述
May 31 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
Jul 09 Python
python pandas消除空值和空格以及 Nan数据替换方法
Oct 30 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 Python
Python SSL证书验证问题解决方案
Jan 13 Python
Python requests模块cookie实例解析
Apr 14 Python
python3的pip路径在哪
Jun 23 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 03 Python
协程Python 中实现多任务耗资源最小的方式
Oct 19 Python
python中zip()函数遍历多个列表方法
Feb 18 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通过ajax实现双击table修改内容
2014/04/28 PHP
PHP生成唯一订单号的方法汇总
2015/04/16 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
jquery ajax 局部无刷新更新数据的实现案例
2014/02/08 Javascript
JQuery异步加载无限下拉框级联功能实现示例
2014/02/19 Javascript
浅谈javascript获取元素transform参数
2015/07/24 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
PHP7新特性简述
2017/06/11 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
python正则表达式抓取成语网站
2013/11/20 Python
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
python字符串中的单双引
2017/02/16 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
python实现二维数组的对角线遍历
2019/03/02 Python
python kafka 多线程消费者&手动提交实例
2019/12/21 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
美国网上订购鲜花:FTD
2016/09/23 全球购物
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
C#面试问题
2016/07/29 面试题
致跳远、跳高运动员广播稿
2014/01/09 职场文书
中国文明网签名寄语
2014/01/18 职场文书
洗发露广告词
2014/03/14 职场文书
政府门卫岗位职责
2014/04/29 职场文书
邀请函模板
2015/02/02 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
外科护士长工作总结
2015/08/12 职场文书
Pygame如何使用精灵和碰撞检测
2021/11/17 Python