首页 > 编程语言 >Python Traceback:异常信息定位

Python Traceback:异常信息定位

时间:2023-10-18 14:33:14浏览次数:43  
标签:定位 traceback 函数 Python tb Traceback print 异常 divide

一、traceback模块简介

traceback模块是Python标准库中的一个模块,提供了一些函数和类,用于获取和处理异常的跟踪信息。它可以帮助我们定位异常信息所在的代码位置,从而更好地调试和修复程序。

 

二、获取异常跟踪信息

1. traceback.format_exc()函数

在异常处理中,我们经常需要获取完整的异常跟踪信息,以便更好地定位问题。traceback模块中的format_exc()函数可以返回一个字符串,包含了完整的异常跟踪信息。

import traceback

try:
    result = 10 / 0
except ZeroDivisionError as e:
    print("除零异常:", str(e))
    print("异常跟踪信息:", traceback.format_exc())

  这个例子中,计算10除以0,这会引发一个ZeroDivisionError异常。在except块中,我们打印出异常信息,并使用traceback.format_exc()函数获取并打印出完整的异常跟踪信息。

 

2. traceback.print_exc()函数

除了使用format_exc()函数获取异常跟踪信息的字符串,还可以使用print_exc()函数直接将异常跟踪信息打印出来。

import traceback

try:
    result = 10 / 0
except ZeroDivisionError as e:
    print("除零异常:", str(e))
    traceback.print_exc()

  在这个例子中,计算10除以0,这会引发一个ZeroDivisionError异常。在except块中,我们打印出异常信息,并使用traceback.print_exc()函数将异常跟踪信息直接打印出来。

 

三、定位异常信息的代码位置

1. traceback.extract_tb()函数

当需要定位异常信息所在的具体代码位置时,可以使用traceback模块中的extract_tb()函数。该函数会返回一个包含了异常信息的列表,每个元素都是一个包含了文件名、行号、函数名和源代码行的元组。

import traceback


def divide(a, b):
    return a / b


try:
    result = divide(10, 0)
except ZeroDivisionError as e:
    print("除零异常:", str(e))
    traceback_list = traceback.extract_tb(e.__traceback__)
    for tb in traceback_list:
        print("文件名:", tb.filename)
        print("行号:", tb.lineno)
        print("函数名:", tb.name)
        print("源代码行:", tb.line)

  在这个例子中,定义了一个divide()函数,用于进行除法运算。在try块中,调用divide()函数并传入10和0,这会引发一个ZeroDivisionError异常。在except块中,打印出异常信息,并使用traceback.extract_tb()函数获取异常信息的列表。然后遍历列表中的每个元素,打印出文件名、行号、函数名和源代码行。

2. traceback.print_tb()函数

除了使用extract_tb()函数获取异常信息的列表,还可以使用print_tb()函数直接将异常信息的列表打印出来。

import traceback


def divide(a, b):
    return a / b


try:
    result = divide(10, 0)
except ZeroDivisionError as e:
    print("除零异常:", str(e))
    traceback.print_tb(e.__traceback__)

  在这个例子中,定义了一个divide()函数,用于进行除法运算。在try块中,调用divide()函数并传入10和0,这会引发一个ZeroDivisionError异常。在except块中,打印出异常信息,并使用traceback.print_tb()函数将异常信息的列表直接打印出来。

 

四、结合logging模块记录异常信息

通常会使用logging模块来记录和输出日志信息。结合traceback模块,可以将异常信息记录到日志文件中,以便后续分析和调试。

import logging
import traceback


def divide(a, b):
    return a / b


try:
    result = divide(10, 0)
except ZeroDivisionError as e:
    error_message = traceback.format_exc()
    # logging.error(error_message)
    logging.exception("除零异常:", error_message)

  在这个例子中,定义了一个divide()函数,用于进行除法运算。在try块中调用divide()函数并传入10和0,这会引发一个ZeroDivisionError异常。在except块中,使用logging.exception()函数将异常信息记录到日志文件中。

标签:定位,traceback,函数,Python,tb,Traceback,print,异常,divide
From: https://www.cnblogs.com/pywen/p/17772272.html

相关文章

  • [914] In Python's datetime library, you can format dates using the strftime() me
    InPython'sdatetimelibrary,youcanformatdatesusingthestrftime()method.Thismethodallowsyoutocreateaformattedstringrepresentationofadatetimeobject,specifyingtheformatyouwant.Here'showyoucanformatadateusingstrft......
  • dhcpd.leases的Python解析程序
    #!/usr/local/bin/python3importdatetime,bisectdefparse_timestamp(raw_str):tokens=raw_str.split()iflen(tokens)==1:iftokens[0].lower()=='never':return'never';......
  • Python3,3分钟,带你了解PyTorch,原来科学计算库也不是很难嘛。
    1、引言小屌丝:鱼哥,最近忙啥嘞?小鱼:啥也没干。小屌丝:确定没干??小鱼:…这话到你嘴里,咋就变为了。小屌丝:也没有啊,我就是确认下,你干没干。小鱼:…能干啥,你想干啥?小屌丝:我想请教你个问题。小鱼:正儿八经的问题,是不?小屌丝:你就看我今天这身穿的,还能不正经?小鱼:穿新鞋走老路小屌丝:此话咋......
  • Python3, 33行代码搞了一个聊天机器人, 这下再也不怕没人说话了。
    Python制作聊天机器人1、引言2、实战2.1准备2.2介绍2.2.1NLTK2.2.2ChatterBot2.3安装2.4示例2.4.1创建聊天机器人2.4.2与用户交互3、总结1、引言小屌丝:鱼哥,看这段代码fromchatterbotimportChatBot#创建聊天机器人chatbot=ChatBot('MyBot')#加载语料库with......
  • Python3,6行代码,搞定网络测速神器,我直接卸载某60测速器。
    6行代码搞定网络测速器1、引言2、代码实战2.1介绍2.1.1定义2.1.2常用方法2.1.3功能2.2安装2.3示例2.3.1测试上传下载速度2.3.2测试延迟2.3.3自定义服务器测试2.3.4多连接测试2.3.5实战3、总结1、引言小屌丝:鱼哥,你知道speedtest这个库吗?小鱼:嗯,知道一点点,咋了?小屌丝:那......
  • Python保留字有哪些?分为几类?
    保留字也称为关键字,这些保留字都被赋予了特殊含义,不能把保留字作为函数、模块、变量、类和其他对象的名称来使用。那么Python保留字有哪些?分为几类?以下是具体内容介绍。Python语言保留字是指在Python编程语言中,被保留不可用于变量名或函数名的标识符。这些保留字具有特定......
  • 调用Python的openpyxl包对Excel表格进行美化
    Python中运用openpyxl包对Excel表格进行美化,包括字体样式调整、单元格对齐方式调整、单元格边框调整、单元格背景颜色调整、行高和列宽调整。使用的Python中openpyxl包的版本为3.0.5先看实际美化前后的效果对比详细的开发代码如下,代码当中对关键信息进行了说明。复制代码......
  • 软件测试|深入理解Python的encode()和decode()方法
    简介在Python中,字符串是不可变的序列对象,它由Unicode字符组成。当我们需要在字符串和字节之间进行转换时,Python提供了两个非常重要的方法:encode()和decode()。这两个方法允许我们在Unicode字符和字节之间进行相互转换,以便在处理文本和二进制数据时更加灵活。在本文中,我们将深入......
  • 软件测试|Python字符串拼接详细解析
    简介在Python编程中,字符串拼接是一个非常常见的操作,它允许我们将多个字符串连接成一个新的字符串。字符串拼接在处理文本和数据时非常有用,比如构建消息、生成文件路径、格式化输出等。在本文中,我们将深入探讨Python中字符串拼接的不同方法和技巧。方法一:连续书写拼接在Python......
  • python 处理异步物化视图同时执行导致内存溢出问题
    python处理异步物化视图同时执行导致内存溢出问题一、前提:因为物化视图过多,同时物化视图到时间同时爆发,导致CPU爆满,所以采用datax自带的调度服务来执行python命令二、直接看代码:importpymysqlimportpymssqlimportdatetimeimporttimeclassMaterialized_plan:d......