Python调试——从 traceback 中获得更多信息
来源:互联网 发布:手机制作个人简历软件 编辑:程序博客网 时间:2024/04/30 10:21
任务
当一个未被捕获的异常发生时,你希望能够打印出所有变量的信息
解决方案
一个 traceback 对象,基本上是一个互相关联的节点的列表,每个节点都指向一个帧对象(frame )。而帧对象则反过来根据 traceback 的关联节点列表以相反的顺序建立它们自己的链表,所以,我们可以根据需要向前或向后移动。如下代码利用了帧的对应函数的局部变量的 字典:
import sys,tracebackdef print_exc_plus(): '打印通常的回溯信息,且附有每帧中的局部变量的列表' tb=sys.exc_info()[2] #返回当前异常的(type,value,traceback) while tb.tb_next: tb=tb.tb_next #栈中的下一个traceback对象 stack=[] f=tb.tb_frame #每个traceback对应一个帧 while f: stack.append(f) #stack存放指向帧对象的所有引用 f=f.f_back stack.reverse() traceback.print_exc() print('locals by frame,innermost last') for frame in stack: print('Frame %s in %s at line %s'%(frame.f_code.co_name, frame.f_code.co_filename, frame.f_lineno)) for key,value in frame.f_locals.items(): #f_locals指向该帧的局部变量的字典 print('%20s='%key,end='') #我们必须_绝对_避免异常的扩散,而str(value) #_能够_引发任何异常,所以我们_必须_捕获所有异常 try: print(value) except: print("<ERROR WHILE PRINTING VALUE>")
如下是一个简单的测试示例:
def pad4(seq): return_value=[] for thing in map(str,seq): return_value.append('0'*(4-len(thing))+thing) return return_valuedata=['1','2',3,'4']try: print(pad4(data))except: print_exc_plus()
如下,红色部分的提示信息是从traceback.print_exc()获得的信息,蓝色部分的信息是我们的函数额外获取的信息。
可以将所有相信的信息写入一个日志文件,以备日后分析。在交互式状态下抛出这么多的信息可能会让人无从下手,而悄悄地把这些信息写入日志文件,对于开发者和用户都是可以接受的。日志文件中的信息就像是一片宝石矿:宝石就在里面,你只要有时间与筛查,就能找到宝石。
0 0
- Python调试——从 traceback 中获得更多信息
- python中traceback模块
- 从google中获取更多信息
- C代码中如何得到python脚本异常时的traceback信息
- PYTHON TRACEBACK
- Python traceback
- python中使用traceback来追踪异常
- 使用Perfmon和PAL工具查看Server性能--从性能监视器获得更多有用信息
- python日志记录完整的异常信息traceback stack
- 飘逸的python - 使用traceback获取详细的异常信息
- python使用traceback获取详细的异常信息
- Visual Studio 调试小技巧(2)-从查看窗口得到更多信息
- Visual C++ 调试技巧: 从变量查看窗口获取更多信息
- Visual Studio 调试小技巧(2)- 从查看窗口得到更多信息
- Visual Studio 调试小技巧(2)-从查看窗口得到更多信息
- 【转】Visual Studio 调试小技巧(2)-从查看窗口得到更多信息
- Visual Studio 调试小技巧(2)-从查看窗口得到更多信息
- Visual Studio 调试小技巧(2)-从查看窗口得到更多信息
- 支持各种控件上/下拉刷新的android-pulltorefresh
- 【线性规划与网络流24题】孤岛营救问题 分层图
- 在 VMWare 下安装 Ubuntu 13.10 的共享文件夹问题
- Linux内核访问外设I/O资源的方式
- iOS绘图机制1
- Python调试——从 traceback 中获得更多信息
- eclipse 连接并操作单机版Hbase
- 指针做形参做局部变量以及内存分配
- Linux/Unix主机环回地址的一些功用
- 关于Android中ANR的一些思考总结
- Kinect for Windows V2和V1对比开发___多台Kinect的使用
- Less (一种动态 CSS 语言)
- MySQL单表百万数据记录分页性能优化
- 虽然年龄大了,也要从头学起 MVC JQuery的Ajax应用测试(四)