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不带重复的全排列代码
Aug 13 Python
python类参数self使用示例
Feb 17 Python
全面分析Python的优点和缺点
Feb 07 Python
Python递归函数实例讲解
Feb 27 Python
Python中psutil的介绍与用法
May 02 Python
pycharm新建一个python工程步骤
Jul 16 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
Django--权限Permissions的例子
Aug 28 Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 Python
python使用建议与技巧分享(一)
Aug 17 Python
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
May 28 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
js简单实现网页换肤功能
2017/04/07 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
django实现前后台交互实例
2017/08/07 Python
基于python的字节编译详解
2017/09/20 Python
Python实现按特定格式对文件进行读写的方法示例
2017/11/30 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
利用css3如何设置没有上下边的列表间隔线
2017/07/03 HTML / CSS
IE9下html5初试小刀
2010/09/21 HTML / CSS
Canvas实现贝赛尔曲线轨迹动画的示例代码
2019/04/25 HTML / CSS
波兰最大的宠物用品网上商店:FERA.PL
2019/08/11 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
幼儿园教师备课制度
2014/01/12 职场文书
入学生会自荐书范文
2014/02/05 职场文书
幼儿园教师的考核评语
2014/04/18 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
年底个人总结范文
2015/03/10 职场文书
被委托人身份证明
2015/08/07 职场文书