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中with语句的用法
Apr 15 Python
讲解Python中fileno()方法的使用
May 24 Python
将Python代码打包为jar软件的简单方法
Aug 04 Python
Python算法应用实战之栈详解
Feb 04 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
Aug 30 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
Django 内置权限扩展案例详解
Mar 04 Python
Django 响应数据response的返回源码详解
Aug 06 Python
如何定义TensorFlow输入节点
Jan 23 Python
利用python中的matplotlib打印混淆矩阵实例
Jun 16 Python
通过实例解析python创建进程常用方法
Jun 19 Python
Python可视化学习之matplotlib内置单颜色
Feb 24 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中几种常见安全设置详解
2010/04/06 PHP
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
php使用GeoIP库实例
2014/06/27 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
php从字符串创建函数的方法
2015/03/16 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
js数组操作学习总结
2013/11/04 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
jQuery、layer实现弹出层的打开、关闭功能
2017/06/28 jQuery
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
js回调函数仿360开机
2019/12/26 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
利用Python学习RabbitMQ消息队列
2015/11/30 Python
Python爬取三国演义的实现方法
2016/09/12 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
亚洲最大旅游体验平台:KKday
2017/10/21 全球购物
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
大学生水文观测实习自我鉴定
2013/09/29 职场文书
中专生的个人自我评价
2013/12/11 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
Vue和Flask通信的实现
2021/05/19 Vue.js
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
pt-archiver 主键自增
2022/04/26 MySQL