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

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

2、现在我们使用 traceback

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

参考文献

traceback文档地址:

以下为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 "", line 10, in

lumberjack()

*** print_exception:

Traceback (most recent call last):

File "", line 10, in

lumberjack()

File "", line 4, in lumberjack

bright_side_of_death()

IndexError: tuple index out of range

*** print_exc:

Traceback (most recent call last):

File "", line 10, in

lumberjack()

File "", 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 "", line 10, in \n lumberjack()\n',

' File "", line 4, in lumberjack\n bright_side_of_death()\n',

' File "", line 7, in bright_side_of_death\n return tuple()[0]\n',

'IndexError: tuple index out of range\n']

*** extract_tb:

[('', 10, '', 'lumberjack()'),

('', 4, 'lumberjack', 'bright_side_of_death()'),

('', 7, 'bright_side_of_death', 'return tuple()[0]')]

*** format_tb:

[' File "", line 10, in \n lumberjack()\n',

' File "", line 4, in lumberjack\n bright_side_of_death()\n',

' File "", 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 "", line 10, in

another_function()

File "", line 3, in another_function

lumberstack()

File "", line 6, in lumberstack

traceback.print_stack()

[('', 10, '', 'another_function()'),

('', 3, 'another_function', 'lumberstack()'),

('', 7, 'lumberstack', 'print repr(traceback.extract_stack())')]

[' File "", line 10, in \n another_function()\n',

' File "", line 3, in another_function\n lumberstack()\n',

' File "", line 8, in lumberstack\n print repr(traceback.format_stack())\n']

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

import traceback

traceback.format_list([('spam.py', 3, '', 'spam.eggs()'),

('eggs.py', 42, 'eggs', 'return "bacon"')])

[' File "spam.py", line 3, in \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定位异常实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持菜鸟教程www.piaodoo.com。

python traceback报错_python3 使用traceback定位异常实例相关推荐

  1. python处理报错_python3报错及解决方案/须注意的细节(持续更新)

    问题: 编码的问题导致.在pymysql.connect()创建连接时,参数charset="utf8",而非"utf-8". 2.latin-1 codec ...

  2. python报错traceback_python3 使用traceback定位异常实例

    1.我们使用正常的输出语句 得到的是(输出结果:division by zero)虽然得到了错误的日志输出,但是不知道为什么出错,也不能定位具体出错位置. 2.现在我们使用 traceback 就可以 ...

  3. python 等号报错_Python学习----Python基础

    Python基础 一.数据类型和变量 1.在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量. 例如: a =520# a是整数prin ...

  4. 【错误记录】执行 Python 程序报错 ( NameError: name ‘reload‘ is not defined )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Windows 的 cmd 命令行运行 python 脚本时 , 报如下错误 : 执行 python ApkTool.py -analyse - ...

  5. 【错误记录】PyCharm 运行 Python 程序报错 ( UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe5 in positio )

    文章目录 一.报错信息 二.解决方案 一.报错信息 PyCharm 运行 Python 程序报错 : D:\002_Project\011_Python\APK\venv\Scripts\python ...

  6. python hbase 报错by_【hbase】使用thrift with python 访问HBase

    HBase 版本: 0.98.6 thrift   版本: 0.9.0 使用 thrift client with python 连接 HBase 报错: 1 Traceback (most rece ...

  7. 控制台执行python脚本报错问题:ModuleNotFoundError: No module named ‘xxx‘

    报错日志: Traceback (most recent call last): File "/Users/xxx/xxx/Project/python/xxx/xxx_req/xxx.py ...

  8. [故障解决]图文:python启动报错:api-ms-win-crt-runtime-l1-1-0.dll丢失解决

    python启动报错:api-ms-win-crt-runtime-l1-1-0.dll丢失解决 环境 Windows 7 SP1 x64 python3.6.1 报错 解决办法 1.下载VC red ...

  9. 【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E402 module level import not at top of file )

    文章目录 一.报错信息 二.解决方案 一.报错信息 PyCharm 运行 Python 程序报错 : PEP 8: E402 module level import not at top of fil ...

最新文章

  1. LeetCode刷题记录10——434. Number of Segments in a String(easy)
  2. python编程自学难吗-为什么很多人不建议自学python编程呢?
  3. Windows 10四大版本官方对比:国人肯定专业版
  4. 【前端】你打console.log要花几秒?
  5. mysql职业要求_为什么面试的每一家都要求掌握MySQL?
  6. How to custom RedHat DVD
  7. 纠结于wpf 多国语言方案,希望各位指点-softbar
  8. java9 javascript_JS(JavaScript)的j进一步了解9(更新中···)
  9. 非常详细的 Docker 学习笔记
  10. 对/boot/grub/grub.conf的理解
  11. 类成员指针——偏移量
  12. mike21换成计算机名称,[转载]mike21基本介绍
  13. 工业循环水过滤浅层介质过滤器(浅层砂过滤器)介绍
  14. 社会网络分析——Social Network Analysis
  15. Python办公系列--Python创建Excel工作簿
  16. 企业微信应用开发(JS-SDK网页式开发)第一集:创建应用以及配置可信域名
  17. maven的下载安装,setting.xml配置教程,Idea 配置maven
  18. java kafka producer_KafkaProducer未成功将消息发送到队列中
  19. 什么是云原生(cloud native)架构?
  20. 你不得不看的图文并茂的MQTT协议通信过程!!!

热门文章

  1. HTML的上标标签与下标标签
  2. 和平精英android怎么写符号,和平精英特殊符号怎么打 和平精英名字特殊符号怎么弄的...
  3. Popeyes:姗姗迟来的洋快餐,凭什么敢称“炸鸡大师” | 知消观察
  4. Vue + Spring Boot 项目实战(七):导航栏与图书页面设计
  5. python爬虫学习3:urllib.parse中urlencode(),quote()
  6. 《从0到1》笔记 第十章 打造帮派文化
  7. powershell 获取鼠标位置 与 鼠标点击
  8. 兄弟连Linux在线课堂:第7讲 Linux用户管理
  9. dell 恢复介质_为您的戴尔计算机创建Windows 10恢复介质
  10. DD语录201105