TraceBack模块

Posted 吃柚子的小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TraceBack模块相关的知识,希望对你有一定的参考价值。

import traceback
def foo(arg):
    try:
        print(int(arg))
    except Exception as e:
        error=traceback.format_exc()
        print(‘error‘,error)
        print(‘type of error‘,type(error))
foo("777aaa")
打印结果:
error Traceback (most recent call last):
  File "G:/Pycharmprojects/test.py", line 4, in foo
    print(int(arg))
ValueError: invalid literal for int() with base 10: ‘777aaa‘

type of error <class ‘str‘>

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

该模块使用追溯对象 - 这是存储在sys.last_traceback变量中并作为第三个项目返回 的对象类型sys.exc_info()

该模块定义了以下功能:

traceback.print_tbtblimit = Nonefile = None 

打印以限制堆栈跟踪条目从追溯对象tb(从调用方的帧开始),如果limit为正。否则,打印最后的 abs(limit)条目。如果省略限制,或者None打印所有条目。如果文件被省略,或None输出到 sys.stderr否则应该是一个打开的文件或类似文件的对象来接收输出。

在版本3.5中更改:添加了负限制支持。

traceback.print_exceptionetypevaluetblimit = Nonefile = Nonechain = True 

将异常信息和堆栈跟踪条目从追溯对象tb打印 文件这与print_tb()以下方式不同:

  • 如果tb不是None,它打印头Traceback (most recent call last):
  • 在堆栈跟踪之后打印异常etype
  • 如果类型(值)SyntaxError具有适当的格式,它打印其中具有指示误差的近似位置脱字符号发生的语法错误的行。

可选的limit参数与print_tb()如果为真(默认值),则链式异常(的 __cause____context__异常的属性)将被打印,以及像解释打印未处理的异常时本身一样。

改变在3.5版本:VLAN时参数将被忽略,并从类型推断

traceback.print_exclimit = Nonefile = Nonechain = True 

这是一个速记print_exception(*sys.exc_info(), limit, file, chain)

traceback.print_lastlimit = Nonefile = Nonechain = True 

这是一个速记一般来说,只有在异常已经达到交互式提示之后才会有效(见 )。print_exception(sys.last_type, sys.last_value, sys.last_traceback, limit, file,chain)sys.last_type

traceback.print_stackf = Nonelimit = Nonefile = None 

打印以限制堆栈跟踪条目(从调用点开始),如果limit为正。否则,打印最后的abs(limit) 条目。如果省略限制,或者None打印所有条目。可选的f参数可用于指定要启动的备用堆栈帧。可选文件参数的含义与 print_tb()

在版本3.5中更改:添加了负限制支持。

traceback.extract_tbtblimit = None 

返回从追溯对象tb提取的“预处理”堆栈跟踪条目列表它对于堆栈跟踪的替代格式很有用。可选的limit参数与 print_tb()“预处理”堆栈跟踪条目是表示通常为堆栈跟踪打印的信息的4元组(文件名行号函数名称文本)。文本是开头和结尾的空白剥离的字符串; 如果源不存在,它是None

traceback.extract_stackf =无limit = None 

从当前堆栈帧中提取原始的追溯。返回值的格式与extract_tb()可选的flimit 参数与print_stack()

traceback.format_listextracted_list 

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

traceback.format_exception_onlyetypevalue 

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

traceback.format_exceptionetypevaluetblimit = Nonechain = True 

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

改变在3.5版本:VLAN时参数将被忽略,并从类型推断

traceback.format_exclimit = Nonechain = True 

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

traceback.format_tbtblimit = None 

一个速记format_list(extract_tb(tb, limit))

traceback.format_stackf =无limit = None 

一个速记format_list(extract_stack(f, limit))

traceback.clear_framestb 

通过调用每个帧对象方法来清除回溯tb中所有堆栈帧的局部变量clear()

以上是关于TraceBack模块的主要内容,如果未能解决你的问题,请参考以下文章

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

traceback模块

TraceBack模块

python--traceback模块

如何有条件地将 C 代码片段编译到我的 Perl 模块?

traceback模块常用函数和类