traceback用法

一、使用场景

程序出现异常,如何快速定位哪里错误。业务场景简单逐个检查, 复杂的就显得low。

a = 'hello world'
b = 12345

try:
    c = a + b
except TypeError as e:
    print(e)
输出 must be str, not int
带入代码中有N个这样try,如何定义,怎么快速查找问题位置,此时需要一个高效的查找工具traceback模块

二、 traceback 输出完整栈信息(调用顺序、错误语句、错误类型等)

1[.用法一]
转载https://blog.csdn.net/caoxinjian423/article/details/83714614

traceback.print_exc(limit=None, file=None, chain=True)
这是print_exception(*sys.exc_info(), limit, file, chain)一个便捷方法。
limit: 这个是限制stack trace层级的,如果不设或者为None,就会打印所有层级的stack trace
file: 这个是设置打印的输出流的,可以为文件,也可以是stdout之类的file-like object。如果不设或为None,则输出到sys.stderr。
chain:默认为True,也就是一并显示__cause__、__context__等串连起来的例外
import traceback

a = 'hello world'
b = 12345

try:
    c = a + b
except TypeError as e:

	# 将错误信息在终端输出
    traceback.print_exc()  
    
    # 将错误信息写入到tt文件夹内
    traceback.print_exc(limit=2, file=open('tt.log', 'a+'))  

输出错误信息出来了,错误文件,行数,原因

Traceback (most recent call last):
  File "C:/Users/allve/Desktop/tt.py", line 7, in <module>
    c = a + b
TypeError: must be str, not int
用法二
import sys

a = ['a', 'b', 'c', 'd']

try:
    b = a[4]
except IndexError as e:

	traceback.print_exc()
	
    exc_type, exc_value, exc_traceback = sys.exc_info()
    print(exc_type)   # type为异常类型
    print(exc_value)   # value为异常参数或错误信息
    print(traceback)   # 为跟踪回溯的对象
    
    ## traceback.print_exception(exc_type, exc_value, exc_traceback, file=open('tt.log', 'a+'))  # 日志记录

    for filename, linenum, funcname, source in traceback.extract_tb(exc_traceback):
        print("%-23s: %s '%s' in %s ()" % (filename, linenum, funcname, source))
        print(filename) # 错误文件
        print(linenum)  # 错误行号
        print(funcname) # 错误函数
        print(source)   # 错误资源


  • traceback.print_exc() 输出

    Traceback (most recent call last):
      File "C:/Users/allve/Desktop/tt.py", line 19, in <module>
        b = a[4]
    IndexError: list index out of range
    
  • exc_type输出

    <class 'IndexError'>
    
  • exc_value 输出

    list index out of range
    
  • traceback输出

    <module 'traceback' from 'c:\\users\\allve\\appdata\\local\\programs\\python\\python36\\lib\\traceback.py'>
    
  • filename, linenum, funcname, source

    C:/Users/allve/Desktop/tt/rainbow_bookII/lib/tt.py
    19
    <module>
    b = a[4]
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风华浪浪

讨个老婆本呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值