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进阶教程之函数参数的多种传递方法
Aug 30 Python
Python深入学习之特殊方法与多范式
Aug 31 Python
Python实现程序的单一实例用法分析
Jun 03 Python
Python实现简单的代理服务器
Jul 25 Python
用Python3创建httpServer的简单方法
Jun 04 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
Dec 18 Python
Django密码存储策略分析
Jan 09 Python
python数据分析:关键字提取方式
Feb 24 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
Python 实现定积分与二重定积分的操作
May 26 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语言构造器介绍
2013/07/08 PHP
php保存任意网络图片到服务器的方法
2015/04/14 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
TypeScript入门-接口
2017/03/30 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
python在不同层级目录import模块的方法
2016/01/31 Python
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
Python request操作步骤及代码实例
2020/04/13 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
CSS3的颜色渐变效果的示例代码
2017/09/29 HTML / CSS
信息技术培训感言
2014/03/06 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
Javascript的promise,async和await的区别详解
2022/03/24 Javascript
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS