python3 使用traceback定位异常实例


Posted in Python onMarch 09, 2020

1、我们使用正常的输出语句

python3 使用traceback定位异常实例

得到的是(输出结果:division by zero)虽然得到了错误的日志输出,但是不知道为什么出错,也不能定位具体出错位置。

2、现在我们使用 traceback

python3 使用traceback定位异常实例

就可以得到具体的错误,以及定位到出错的位置。这样就能更方便调试错误。

参考文献

traceback文档地址:

https://docs.python.org/2/library/traceback.html

以下为google翻译(仅供参考,):

该模块提供了一个标准接口,用于提取,格式化和打印Python程序的堆栈跟踪。它在打印堆栈跟踪时完全模仿了Python解释器的行为。当您想要在程序控制下打印堆栈跟踪时,这非常有用,例如在解释器周围的“包装器”中。

该模块使用回溯对象 - 这是存储在变量中的对象类型sys.exc_traceback(不建议使用), sys.last_traceback并作为第三项返回 sys.exc_info()。

该模块定义了以下功能:

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

打印以限制回溯对象tb中的堆栈跟踪条目。如果 省略limit或者None打印所有条目。如果省略文件或None输出转到sys.stderr; 否则它应该是一个打开的文件或类似文件的对象来接收输出。

traceback.print_exception(etype,value,tb [,limit [,file ] ] )

打印异常信息,最多限制堆栈跟踪条目从traceback tb到文件。这与print_tb()以下方式不同:(1)如果tb不是None,则打印标题; (2)在堆栈跟踪后打印异常etype和值 ; (3)如果etype是且值具有适当的格式,则打印出发生语法错误的行,其中插入符号表示错误的大致位置。Traceback (most recent call last):SyntaxError

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

这是一个简写。(实际上,它用于以线程安全的方式检索相同的信息,而不是使用已弃用的变量。)print_exception(sys.exc_type, sys.exc_value, sys.exc_traceback, limit, file)sys.exc_info()

traceback.format_exc([ 限制] )

这就像print_exc(limit)但返回一个字符串而不是打印到文件。

版本2.4中的新功能。

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

这是一个简写。通常,只有在异常达到交互式提示后才会起作用(请参阅参考资料)。print_exception(sys.last_type, sys.last_value, sys.last_traceback, limit, file)sys.last_type

traceback.print_stack([ f [,limit [,file ] ] ] )

此函数从其调用点打印堆栈跟踪。可选的 f参数可用于指定要启动的备用堆栈帧。可选的limit和file参数具有相同的含义 print_exception()。

traceback.extract_tb(tb [,限制] )

返回从追溯对象tb中提取的最多限制 “预处理”堆栈跟踪条目的列表。它对堆栈跟踪的替代格式化很有用。如果省略limit,则提取所有条目。“预处理”堆栈跟踪条目是4元组(文件名,行号,函数名*,文本),表示通常为堆栈跟踪打印的信息。该文本是开头和结尾的空白剥离的字符串; 如果源不可用则是。NoneNone

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

从当前堆栈帧中提取原始回溯。返回值的格式与extract_tb()。可选的f和limit 参数具有与之相同的含义print_stack()。

traceback.format_list(extracted_list )

给定由extract_tb()or extract_stack()返回的元组列表,返回准备打印的字符串列表。结果列表中的每个字符串对应于参数列表中具有相同索引的项。每个字符串以换行符结尾; 对于那些源文本行不是的项目,字符串也可以包含内部换行符 None。

traceback.format_exception_only(etype,value )

格式化回溯的异常部分。参数是异常类型,etype和值,例如由sys.last_type和 给出的sys.last_value。返回值是一个字符串列表,每个字符串以换行符结尾。通常,列表包含单个字符串; 但是,对于 SyntaxError异常,它包含多行(打印时)显示有关语法错误发生位置的详细信息。指示发生了哪个异常的消息是列表中的始终最后一个字符串。

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

格式化堆栈跟踪和异常信息。参数与相应的参数具有相同的含义print_exception()。返回值是一个字符串列表,每个字符串以换行符结尾,一些包含内部换行符。连接和打印这些行时,将打印完全相同的文本print_exception()。

traceback.format_tb(tb [,限制] )

简写。format_list(extract_tb(tb, limit))

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

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

traceback.tb_lineno(tb )

此函数返回traceback对象中设置的当前行号。这个函数是必要的,因为在2.3之前的Python版本中,当-O标志传递给Python时,tb.tb_lineno没有正确更新。此功能在2.3版本中没有用处。

回溯示例

这个简单的例子实现了一个基本的read-eval-print循环,类似于标准Python交互式解释器循环(但不太有用)。有关解释器循环的更完整实现,请参阅该code 模块。

import sys, traceback

def run_user_code(envdir):
  source = raw_input(">>> ")
  try:
    exec source in envdir
  except:
    print "Exception in user code:"
    print '-'*60
    traceback.print_exc(file=sys.stdout)
    print '-'*60

envdir = {}
while 1:
  run_user_code(envdir)

以下示例演示了打印和格式化异常和回溯的不同方法:

import sys, traceback

def lumberjack():
  bright_side_of_death()

def bright_side_of_death():
  return tuple()[0]

try:
  lumberjack()
except IndexError:
  exc_type, exc_value, exc_traceback = sys.exc_info()
  print "*** print_tb:"
  traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
  print "*** print_exception:"
  traceback.print_exception(exc_type, exc_value, exc_traceback,
               limit=2, file=sys.stdout)
  print "*** print_exc:"
  traceback.print_exc()
  print "*** format_exc, first and last line:"
  formatted_lines = traceback.format_exc().splitlines()
  print formatted_lines[0]
  print formatted_lines[-1]
  print "*** format_exception:"
  print repr(traceback.format_exception(exc_type, exc_value,
                     exc_traceback))
  print "*** extract_tb:"
  print repr(traceback.extract_tb(exc_traceback))
  print "*** format_tb:"
  print repr(traceback.format_tb(exc_traceback))
  print "*** tb_lineno:", exc_traceback.tb_lineno

该示例的输出看起来类似于:

*** print_tb:
 File "<doctest...>", line 10, in <module>
  lumberjack()
*** print_exception:
Traceback (most recent call last):
 File "<doctest...>", line 10, in <module>
  lumberjack()
 File "<doctest...>", line 4, in lumberjack
  bright_side_of_death()
IndexError: tuple index out of range
*** print_exc:
Traceback (most recent call last):
 File "<doctest...>", line 10, in <module>
  lumberjack()
 File "<doctest...>", line 4, in lumberjack
  bright_side_of_death()
IndexError: tuple index out of range
*** format_exc, first and last line:
Traceback (most recent call last):
IndexError: tuple index out of range
*** format_exception:
['Traceback (most recent call last):\n',
 ' File "<doctest...>", line 10, in <module>\n  lumberjack()\n',
 ' File "<doctest...>", line 4, in lumberjack\n  bright_side_of_death()\n',
 ' File "<doctest...>", line 7, in bright_side_of_death\n  return tuple()[0]\n',
 'IndexError: tuple index out of range\n']
*** extract_tb:
[('<doctest...>', 10, '<module>', 'lumberjack()'),
 ('<doctest...>', 4, 'lumberjack', 'bright_side_of_death()'),
 ('<doctest...>', 7, 'bright_side_of_death', 'return tuple()[0]')]
*** format_tb:
[' File "<doctest...>", line 10, in <module>\n  lumberjack()\n',
 ' File "<doctest...>", line 4, in lumberjack\n  bright_side_of_death()\n',
 ' File "<doctest...>", line 7, in bright_side_of_death\n  return tuple()[0]\n']
*** tb_lineno: 10

以下示例显示了打印和格式化堆栈的不同方法:

import traceback
def another_function():
  lumberstack()

def lumberstack():
		traceback.print_stack()
	  print repr(traceback.extract_stack())
   	print repr(traceback.format_stack())

another_function()
 File "<doctest>", line 10, in <module>
  another_function()
 File "<doctest>", line 3, in another_function
  lumberstack()
 File "<doctest>", line 6, in lumberstack
  traceback.print_stack()
[('<doctest>', 10, '<module>', 'another_function()'),
 ('<doctest>', 3, 'another_function', 'lumberstack()'),
 ('<doctest>', 7, 'lumberstack', 'print repr(traceback.extract_stack())')]
[' File "<doctest>", line 10, in <module>\n  another_function()\n',
 ' File "<doctest>", line 3, in another_function\n  lumberstack()\n',
 ' File "<doctest>", line 8, in lumberstack\n  print repr(traceback.format_stack())\n']

最后一个示例演示了最后几个格式化函数:

import traceback
traceback.format_list([('spam.py', 3, '<module>', 'spam.eggs()'),
            	('eggs.py', 42, 'eggs', 'return "bacon"')])
[' File "spam.py", line 3, in <module>\n  spam.eggs()\n',
 ' File "eggs.py", line 42, in eggs\n  return "bacon"\n']
an_error = IndexError('tuple index out of range')
traceback.format_exception_only(type(an_error), an_error)
['IndexError: tuple index out of range\n']

以上这篇python3 使用traceback定位异常实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python编程给numpy矩阵添加一列方法示例
Dec 04 Python
python定向爬虫校园论坛帖子信息
Jul 23 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 Python
基于Python爬虫采集天气网实时信息
Jun 05 Python
Python logging模块进行封装实现原理解析
Aug 07 Python
python实现粒子群算法
Oct 15 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
Oct 29 Python
python实现自动化群控的步骤
Apr 11 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 15 Python
Python+Selenium自动化环境搭建与操作基础详解
Mar 13 Python
基于Python3.7.1无法导入Numpy的解决方式
Mar 09 #Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
Mar 09 #Python
Python实现井字棋小游戏
Mar 09 #Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 #Python
python为QT程序添加图标的方法详解
Mar 09 #Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
Mar 09 #Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 #Python
You might like
php中定义网站根目录的常用方法
2010/08/08 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
Python模块结构与布局操作方法实例分析
2017/07/24 Python
Python实现批量压缩图片
2018/01/25 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
十八届三中全会个人学习材料
2014/02/13 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
导游词之长城八达岭
2019/09/24 职场文书
纯html+css实现打字效果
2021/08/02 HTML / CSS
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL