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学习笔记之调用eval函数出现invalid syntax错误问题
Oct 18 Python
Ubuntu下安装PyV8
Mar 13 Python
flask + pymysql操作Mysql数据库的实例
Nov 13 Python
使用 Python 读取电子表格中的数据实例详解
Apr 17 Python
Jupyter notebook如何实现指定浏览器打开
May 13 Python
Python如何输出整数
Jun 07 Python
Python依赖包迁移到断网环境操作
Jul 13 Python
Python 如何调试程序崩溃错误
Aug 03 Python
python爬虫爬取某网站视频的示例代码
Feb 20 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 Python
Python实现为PDF去除水印的示例代码
Apr 03 Python
图神经网络GNN算法
May 11 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获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
php eval函数一句话木马代码
2015/05/21 PHP
session 加入redis的实现代码
2016/07/15 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
vue动态禁用控件绑定disable的例子
2019/10/28 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
Python 实现进度条的六种方式
2021/01/06 Python
python wsgiref源码解析
2021/02/06 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
个人生活学习自我评价范文
2013/11/26 职场文书
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
航空学院求职信
2014/06/11 职场文书
同学聚会邀请函
2015/01/30 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL