traceback异常打印
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
常用方法及其区别
正文测试过程
#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异常打印的更多相关文章
- Python 捕捉traceback异常栈信息
捕捉traceback异常栈信息 by:授客 QQ:1033553122 相关函数简介 sys.exc_info() 返回包含3个元素(type, value, traceback)的元组,提供关 ...
- Python traceback 模块, 打印异常信息
Python感觉是模仿Java, 到处都需要加try..catch.... 这里记录一下用法,方便后续使用. # -*- coding:utf-8 -*- import os import loggi ...
- python的异常打印
在代码运行中有的代码可能会发生异常,但是奇怪的是异常信息并没有打印出来, 于是我们在代码中加入这个就能打印出来啦. try: #playsound(msg.file_name()) #playsoun ...
- Python中异常打印——面向程序猿
import logging # logging.disable(logging.CRITICAL) logging.basicConfig(filename="loggingBug.txt ...
- 一个日志模板,从traceback打印异常受启发做的模板,可被pycharm esclip 等ide识别和跳转
之前发过日志,再增加一种模板. logging.Formatter('%(asctime)s - %(name)s - File "%(pathname)s", line %(li ...
- python traceback捕获并打印异常
异常处理是日常操作了,但是有时候不能只能打印我们处理的结果,还需要将我们的异常打印出来,这样更直观的显示错误 下面来介绍traceback模块来进行处理 try: 1/0 except Excepti ...
- 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 ...
- python中使用traceback来追踪异常
test1.py中,当分母为0的时候,调用系统退出 #!/usr/bin/python import sys def division(a=1, b=1): if b==0: print 'b eq ...
- 在error日志打印异常
在日志中打印异常,经常会看到以下的写法: logger.error(e.getMessage()); 或者是: e.printStackTrace(); 这两种其实都不太好. e.getMessage ...
随机推荐
- python 函数定义
我们可以创建一个函数来列出费氏数列 >>> def fib(n): # write Fibonacci series up to n ... """Pr ...
- 关于cuda 环境遇到的问题
1.error while loading shared libraries: libcudart.so.9.0: cannot open shared object file: No such fi ...
- Win7点击文件夹右键可打开cmd控制台,并获取当前目录
当我们用cmd时,有时要切换到某个文件夹的目录,可以在当前目录下,按住shift单击右键打开控制台,也可以在鼠标右键中添加cmd启动命令: 1.在开始搜索框输入regedit,打开注册表: 2.打开 ...
- docker --help 详解
[root@c1 _src]# dockerd --help Usage: dockerd [OPTIONS] A self-sufficient runtime for containers. Op ...
- $bzoj4569$
$st表+并查集$ $考虑暴力方法:我们每次将对应相等的位置用并查集连起来,那么最终答案就是9*10^{连通块个数-1}$ $很明显上面这个办法过不去,问题在于重复次数太多了,如果一个区间已经对应相等 ...
- u盘启动安装系统
七彩虹主板如何设置U盘启动,本文就以七彩虹CG41主板为例详细的讲讲U盘启动设置方法. 几天前,想用U盘启动的时候,发现CG41主板启动顺序里找不到USB项,Boot Device Priority( ...
- 4、css之position
一.position position属性:指定一个元素(静态的,相对的,绝对或固定)的定位方法的类型. 1.fixed值 fixed值:生成固定定位的元素,相对于浏览器窗口进行定位.元素的位置通过 ...
- Flutter实战视频-移动电商-64.会员中心_顶部头像UI布局
64.会员中心_顶部头像UI布局 会员中心的样式 member.dart 清除原来的代码生成一个基本的结构 默认返回一个scaffold脚手架工具,body里面布局使用ListView,这样不会出现纵 ...
- Linux 软链接 硬链接 ln命令(繁杂版)
注意:创建软连接的时候,要用绝对路径!!! 这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln - ...
- win7 win8 快捷键直接调出任务管理器
问:windos7如何设置按ctrl+alt +delete三个键就直接出现任务管理器. 答:你应该这样按Ctrl+shift+esc,这样就可以直接调出任务管理器,而且一只手就可以完成,大拇指按Ct ...