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 相关文章推荐
Windows上配置Emacs来开发Python及用Python扩展Emacs
Nov 20 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
Mar 30 Python
Python 查看文件的编码格式方法
Dec 21 Python
利用python将xml文件解析成html文件的实现方法
Dec 22 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
Jul 27 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 Python
python如何制作缩略图
Apr 30 Python
pandas DataFrame行或列的删除方法的实现示例
Aug 02 Python
python3 实现函数写文件路径的正确方法
Nov 27 Python
Django集成富文本编辑器summernote的实现步骤
May 31 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 Python
Python实现文字pdf转换图片pdf效果
Apr 03 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
关于时间计算的结总
2006/12/06 PHP
php foreach 参数强制类型转换的问题
2010/12/10 PHP
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
javascript 命名规则 变量命名规则
2010/02/25 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
原生JS实现跑马灯效果
2017/02/20 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
使用python的chardet库获得文件编码并修改编码
2014/01/22 Python
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
Python实现的计算器功能示例
2018/04/26 Python
Python退火算法在高次方程的应用
2018/07/26 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
2020/07/20 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
房产公证书范本
2014/04/10 职场文书
历史博物馆观后感
2015/06/05 职场文书
大学运动会通讯稿
2015/07/18 职场文书
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫