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中的类学习笔记
Sep 23 Python
Python列表计数及插入实例
Dec 17 Python
Python中有趣在__call__函数
Jun 21 Python
Python删除空文件和空文件夹的方法
Jul 14 Python
Python函数的周期性执行实现方法
Aug 13 Python
python 保存float类型的小数的位数方法
Oct 17 Python
python常用数据重复项处理方法
Nov 22 Python
如何在Python 游戏中模拟引力
Mar 27 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
Apr 30 Python
Python3创建Django项目的几种方法(3种)
Jun 03 Python
Django Paginator分页器的使用示例
Jun 23 Python
Python游戏开发实例之graphics实现AI五子棋
Nov 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使用百度天气接口示例
2014/04/22 PHP
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
2016/05/24 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
python实现接口并发测试脚本
2019/06/25 Python
python动态视频下载器的实现方法
2019/09/16 Python
python实现大学人员管理系统
2019/10/25 Python
Pyqt5自适应布局实例
2019/12/13 Python
python 爬取古诗文存入mysql数据库的方法
2020/01/08 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
西部世纪面试题
2014/12/05 面试题
医院院务公开实施方案
2014/05/03 职场文书
演讲稿开场白台词
2014/08/25 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js