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类继承用法实例分析
Oct 10 Python
浅谈Python的Django框架中的缓存控制
Jul 24 Python
python根据京东商品url获取产品价格
Aug 09 Python
python的random模块及加权随机算法的python实现方法
Jan 04 Python
Python Pandas数据中对时间的操作
Jul 30 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
Jan 04 Python
Python安装依赖(包)模块方法详解
Feb 14 Python
Python多线程多进程实例对比解析
Mar 12 Python
用opencv给图片换背景色的示例代码
Jul 08 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
Python中的变量与常量
Nov 11 Python
Python 如何利用ffmpeg 处理视频素材
Nov 27 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中的日期处理方法集锦
2007/01/02 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
js 居中漂浮广告
2010/03/21 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
JS获取整个页面文档的实现代码
2011/12/15 Javascript
js控制frameSet示例
2013/09/10 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
js,jq,css多方面实现简易下拉菜单功能
2017/05/13 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
在vue里使用codemirror遇到的问题
2018/11/01 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
Python中datetime模块参考手册
2017/01/13 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
使用Python设计一个代码统计工具
2018/04/04 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
利用python汇总统计多张Excel
2020/09/22 Python
python 利用toapi库自动生成api
2020/10/19 Python
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
正隆泰信息技术有限公司上机题
2012/06/14 面试题
外语系大学生自荐信范文
2014/03/01 职场文书
企业授权委托书范本
2014/09/22 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python