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批量制作雷达图的实现方法
Jul 26 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
Oct 13 Python
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
python通过elixir包操作mysql数据库实例代码
Jan 31 Python
python中使用 xlwt 操作excel的常见方法与问题
Jan 13 Python
python+mysql实现学生信息查询系统
Feb 21 Python
详解python 模拟豆瓣登录(豆瓣6.0)
Apr 18 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
对pytorch的函数中的group参数的作用介绍
Feb 18 Python
pandas按照列的值排序(某一列或者多列)
Dec 13 Python
python-地图可视化组件folium的操作
Dec 14 Python
一劳永逸彻底解决pip install慢的办法
May 24 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
PHP读取大文件的几种方法介绍
2016/10/27 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
javascript 异常处理使用总结
2009/06/21 Javascript
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
关于jQuery的inArray 方法介绍
2011/10/08 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
2011/11/21 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
js获取class的所有元素
2013/03/28 Javascript
js实现分割上传大文件
2016/03/09 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
详解Eslint 配置及规则说明
2018/09/10 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
[04:55]完美世界副总裁蔡玮:DOTA2的自由、公平与信任
2013/12/18 DOTA
详解Python3.1版本带来的核心变化
2015/04/07 Python
如何在Python中编写并发程序
2016/02/27 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
Python实现SQL注入检测插件实例代码
2019/02/02 Python
python cumsum函数的具体使用
2019/07/29 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
Python实现区域填充的示例代码
2021/02/03 Python
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
理货员的岗位职责
2013/11/23 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
出纳工作检讨书
2014/10/18 职场文书
员工表扬信怎么写
2015/05/05 职场文书
六年级数学教学反思
2016/02/16 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书