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 25 Python
在服务器端实现无间断部署Python应用的教程
Apr 16 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
java中两个byte数组实现合并的示例
May 09 Python
详解python执行shell脚本创建用户及相关操作
Apr 11 Python
python模式 工厂模式原理及实例详解
Feb 11 Python
Django中FilePathField字段的用法
May 21 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
python实现求纯色彩图像的边框
Apr 08 Python
Matlab求解数组中的最大值及它所在的具体位置
Apr 16 Python
Python图片处理之图片裁剪教程
May 27 Python
健身房被搭讪?用python写了个小米计时器助人为乐
Jun 08 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/02/08 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
用 JSON 处理缓存
2007/04/27 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
javascript面向对象之Javascript 继承
2010/05/04 Javascript
兼容IE和FF的图片上传前预览js代码
2013/05/28 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
js导出excel文件的简洁方法(推荐)
2016/11/02 Javascript
js微信支付实现代码
2016/12/22 Javascript
nodejs基础知识
2017/02/03 NodeJs
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
python3中zip()函数使用详解
2018/06/29 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
自主招生自荐信
2013/12/08 职场文书
学习保证书怎么写
2015/02/26 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技
Python中的 enumerate和zip详情
2022/05/30 Python