traceback模块

traceback模块被用来跟踪异常返回信息. 如下例所示:

import traceback
try:
raise SyntaxError, "traceback test"
except:
traceback.print_exc()

将会在控制台输出类似结果:

Traceback (most recent call last):
File "H:PythonWorkSpaceTestsrcTracebackTest.py", line 3, in <module>
raise SyntaxError, "traceback test"
SyntaxError: traceback test

类似在你没有捕获异常时候, 解释器所返回的结果.

你也可以传入一个文件, 把返回信息写到文件中去, 如下:

import traceback
import StringIO
try:
raise SyntaxError, "traceback test"
except:
fp = StringIO.StringIO() #创建内存文件对象
traceback.print_exc(file=fp)
message = fp.getvalue()
print message

常用方法及其区别

问题:traceback.print_exc()和traceback.format_exc()有什么区别呢?
format_exc()返回字符串,print_exc()则直接给打印出来。
即traceback.print_exc()与print traceback.format_exc()效果是一样的。
print_exc()还可以接受file参数直接写入到一个文件。比如
traceback.print_exc(file=open('tb.txt','w+'))
写入到tb.txt文件去。

正文测试过程

#sys.exc_info()
返回 (type, value, traceback). type为异常类型, value为异常的参数(通常为异常错误的信息), traceback为跟踪回溯的对象.

    exc_type, exc_value, exc_traceback = sys.exc_info()
print "*** print sys.exc_info:"
print 'exc_type is: %s, exc_value is: %s, exc_traceback is: %s' % (exc_type, exc_value, exc_traceback)

输出:

*** print sys.exc_info:
exc_type is: <type 'exceptions.IndexError'>, exc_value is: tuple index out of range, exc_traceback is: <traceback object at 0x7fee3b00eb48>

traceback.print_tb(traceback[, limit[, file]])

打印栈的跟踪信息. 如果省略limit, 将打印所有跟踪入口信息. file默认为std.err.

import traceback
import sys def traceback_test():
try:
raise SyntaxError, 'traceback_test'
except Exception as e:
traceback.print_tb(e, limit=1, file=sys.stdout) if __name__ == '__main__':
traceback_test()

错误信息

Traceback (most recent call last):
File "D:/MH_code/test_flask_project/app/traceback.py", line 14, in <module>
traceback_test()
File "D:/MH_code/test_flask_project/app/traceback.py", line 11, in traceback_test
traceback.print_tb(e, limit=1, file=sys.stdout)
File "C:\Python27\lib\traceback.py", line 61, in print_tb
f = tb.tb_frame
AttributeError: 'exceptions.SyntaxError' object has no attribute 'tb_frame'

traceback.print_exception(type, value, traceback[, limit[, file]])

打印异常信息. (type, value, traceback)为sys.exc_info()返回的元组.和print_tb不同的是:
- 如果traceback不为空, 打印栈头信息(即最近被调用的信息).
- 在栈的信息后打印异常类型和参数.
- 如果是语法错误, 会打印对应的代码行数, 用”^”指明语法错误的位置.

import traceback
import sys def traceback_test():
try:
raise SyntaxError, 'traceback_test'
except Exception as e:
     exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=sys.stdout) if __name__ == '__main__':
traceback_test()

错误信息

None(用的2.7,打印的什么玩意没细究)

traceback.print_exc([limit[, file]])

print_exception(sys.exc_type, sys.exc_value, sys.exc_traceback, limit, file)的简写

import traceback
import sys def traceback_test():
try:
raise SyntaxError, 'traceback_test'
except Exception as e:
traceback.print_exc() if __name__ == '__main__':
traceback_test()

错误信息

Traceback (most recent call last):
File "D:/MH_code/test_flask_project/app/traceback.py", line 11, in traceback_test
raise SyntaxError, 'traceback_test'
SyntaxError: traceback_test

traceback.format_exc([limit])

类似于print_exc(limit), 但是返回字符串而不是输出到file.

import traceback
import sys def traceback_test():
try:
raise SyntaxError, 'traceback_test'
except Exception as e:
formatted_lines = traceback.format_exc().splitlines()
print formatted_lines[0]
print formatted_lines[-1]
if __name__ == '__main__':
traceback_test()

错误信息

Traceback (most recent call last):
SyntaxError: traceback_test

traceback.format_exception(type, value, tb[, limit])

格式化栈信息和异常信息. 返回一个列表, 包括代码文件和代码行, 以及异常信息.

import traceback
import sys def traceback_test():
try:
raise SyntaxError, 'traceback_test'
except Exception as e:
   exc_type, exc_value, exc_traceback = sys.exc_info()
print repr(traceback.format_exception(exc_type, exc_value, exc_traceback))
if __name__ == '__main__':
traceback_test()

错误信息

['None\n']

traceback.extract_tb(traceback[, limit])

返回一个跟踪对象(traceback)的元组列表. 元组内容为(filename, line number, function name, text).

import traceback
import sys def traceback_test():
try:
raise SyntaxError, 'traceback_test'
except Exception as e:
exc_type, exc_value, exc_traceback = sys.exc_info()
print repr(traceback.extract_tb(exc_traceback))
if __name__ == '__main__':
traceback_test()

错误信息

[('D:/MH_code/test_flask_project/app/traceback.py', 11, 'traceback_test', "raise SyntaxError, 'traceback_test'")]

traceback.extract_stack([f[, limit]])

返回当前栈帧的原始跟踪(traceback)对象的信息, 格式和extract_tb一样, 元组内容为(filename, line number, function name, text).

import traceback
import sys def traceback_test():
try:
raise SyntaxError, 'traceback_test'
except Exception as e:
print traceback.extract_stack()
if __name__ == '__main__':
traceback_test()

输出

[('D:/MH_code/test_flask_project/app/traceback.py', 22, '<module>', 'traceback_test()'),
('D:/MH_code/test_flask_project/app/traceback.py', 20, 'traceback_test', 'print
traceback.extract_stack()')]

traceback.format_list(list)

按照list对应的项, 返回一个元组列表, 形式为同extract_tb()或者extract_stack()返回的一样. 元组内容为(filename, line number, function name, text)
将extract_tb()或者extract_stack()返回的list进行格式化.

traceback.format_tb(tb[, limit])

format_list(extract_tb(tb, limit))的简写.

traceback.format_stack([f[, limit]])

format_list(extract_stack(f, limit))的简写

traceback.tb_lineno(tb)

返回traceback对象设置的行数

参考:http://ydoing.iteye.com/blog/2248238

参考:http://blog.csdn.net/handsomekang/article/details/9373035

traceback异常打印的更多相关文章

  1. Python 捕捉traceback异常栈信息

    捕捉traceback异常栈信息   by:授客 QQ:1033553122 相关函数简介 sys.exc_info() 返回包含3个元素(type, value, traceback)的元组,提供关 ...

  2. Python traceback 模块, 打印异常信息

    Python感觉是模仿Java, 到处都需要加try..catch.... 这里记录一下用法,方便后续使用. # -*- coding:utf-8 -*- import os import loggi ...

  3. python的异常打印

    在代码运行中有的代码可能会发生异常,但是奇怪的是异常信息并没有打印出来, 于是我们在代码中加入这个就能打印出来啦. try: #playsound(msg.file_name()) #playsoun ...

  4. Python中异常打印——面向程序猿

    import logging # logging.disable(logging.CRITICAL) logging.basicConfig(filename="loggingBug.txt ...

  5. 一个日志模板,从traceback打印异常受启发做的模板,可被pycharm esclip 等ide识别和跳转

    之前发过日志,再增加一种模板. logging.Formatter('%(asctime)s - %(name)s - File "%(pathname)s", line %(li ...

  6. python traceback捕获并打印异常

    异常处理是日常操作了,但是有时候不能只能打印我们处理的结果,还需要将我们的异常打印出来,这样更直观的显示错误 下面来介绍traceback模块来进行处理 try: 1/0 except Excepti ...

  7. C# 打印异常

    1. [代码]函数:将异常打印到LOG文件     跳至 [1] [2] [4] [全屏预览] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

  8. python中使用traceback来追踪异常

    test1.py中,当分母为0的时候,调用系统退出 #!/usr/bin/python import sys def division(a=1, b=1): if b==0: print 'b eq ...

  9. 在error日志打印异常

    在日志中打印异常,经常会看到以下的写法: logger.error(e.getMessage()); 或者是: e.printStackTrace(); 这两种其实都不太好. e.getMessage ...

随机推荐

  1. SVN版本控制中.a无法提交问题

    1.首先xcode是默认忽略.a文件的.改变方法如下: 1⃣️. 打开终端,  在命令行中输入: vi ~/.subversion/config  来打开配置文件.2⃣️. 然后, 在[miscell ...

  2. 分布式锁(Zookeeper实现)

    分布式锁 分布式锁,这个主要得益于 ZooKeeper 为我们保证了数据的强一致性.锁服务可以分为两类,一个是 保持独占,另一个是 控制时序. 1. 所谓保持独占,就是所有试图来获取这个锁的客户端,最 ...

  3. HashMap vs ConcurrentHashMap — 示例及Iterator探秘

    如果你是一名Java开发人员,我能够确定你肯定知道ConcurrentModificationException,它是在使用迭代器遍历集合对象时修改集合对象造成的(并发修改)异常.实际上,Java的集 ...

  4. 基于深度学习和迁移学习的识花实践——利用 VGG16 的深度网络结构中的五轮卷积网络层和池化层,对每张图片得到一个 4096 维的特征向量,然后我们直接用这个特征向量替代原来的图片,再加若干层全连接的神经网络,对花朵数据集进行训练(属于模型迁移)

    基于深度学习和迁移学习的识花实践(转)   深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件.不过 Tens ...

  5. 为什么要把页面放在 WEB-INF 路径下?

    1.基于不同的功能 JSP 被放置在不同的目录下 这种方法的问题是这些页面文件容易被偷看到源代码,或被直接调用.某些场合下这可能不是个大问题,可是在特定情形中却可能构成安全隐患.用户可以绕过Strut ...

  6. Linux下C语音实现socket发送和接收的小程序

    1.什么是socket套接字 socket其实就是计算机通信的端口,可以实现两个计算机之间的通信的一个接口,应用程序在网络上传输就是通过这个借口实现. socket分为三种类型: 字节流套接字(Str ...

  7. Android之styles.xml,以及自定义风格

    1.styles.xml 在现在的ADT创建的Project中,会有values,values-v11和values-v14三个文件夹,每个文件夹下都有一个styles.xml. API11是Andr ...

  8. 关闭页面,window.onunload事件未执行的原因

    1.问题描述: JS中定义widow.onunload= function(),页面关闭时,logout()函数未执行. window.onunload = function() { logout() ...

  9. C++之匿名对象解析

    我们知道在C++的创建对象是一个费时,费空间的一个操作.有些固然是必不可少,但还有一些对象却在我们不知道的情况下被创建了.通常以下三种情况会产生临时对象:   1,以值的方式给函数传参:   2,类型 ...

  10. Boost-ioservices介绍

    IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象). asio::io_service i ...