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常用方法和技巧
May 18 Python
深入理解Python3中的http.client模块
Mar 29 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
Jan 23 Python
python实现AES加密解密
Mar 28 Python
python实现抽奖小程序
Apr 15 Python
python装饰器常见使用方法分析
Jun 26 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
python matplotlib如何给图中的点加标签
Nov 14 Python
Django-migrate报错问题解决方案
Apr 21 Python
pytorch 带batch的tensor类型图像显示操作
May 20 Python
PyQt5实现多张图片显示并滚动
Jun 11 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 时间转换Unix时间戳代码
2010/01/22 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
2018/10/24 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
vue实现循环切换动画
2018/10/17 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
Python OpenCV实现测量图片物体宽度
2020/05/27 Python
Python数据可视化图实现过程详解
2020/06/12 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
民族学专业求职信
2014/07/28 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
党员评议自我评价
2015/03/03 职场文书
2015年依法行政工作总结
2015/04/29 职场文书
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸
Java数组详细介绍及相关工具类
2022/04/14 Java/Android