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 相关文章推荐
Linux下编译安装MySQL-Python教程
Feb 02 Python
python开发简易版在线音乐播放器
Mar 03 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
Python实现求一个集合所有子集的示例
May 04 Python
linux下python使用sendmail发送邮件
May 22 Python
python引入不同文件夹下的自定义模块方法
Oct 27 Python
python时间序列按频率生成日期的方法
May 14 Python
python使用PIL和matplotlib获取图片像素点并合并解析
Sep 10 Python
简单了解python中的与或非运算
Sep 18 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
python用tkinter开发的扫雷游戏
Jun 01 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
php 动态多文件上传
2009/01/18 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
php实现session共享的实例方法
2019/09/19 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
JavaScript中继承用法实例分析
2015/05/16 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
Knockoutjs 学习系列(二)花式捆绑
2016/06/07 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
详解python 支持向量机(SVM)算法
2020/09/18 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
2021/01/25 Python
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
软件工程专业推荐信
2013/10/28 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
机关办公室岗位职责
2014/04/16 职场文书
工作失误检讨书
2015/01/26 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
担保书格式范文
2015/09/22 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
各种货币符号快捷输入
2022/02/17 杂记