Python进阶之-traceback详解

✨前言:

在日常开发中,我们会做一些基本的异常处理,但是有时候只能打印我们处理的结果或者将异常打印出来,不能直观的知道在哪个文件中的哪一行出错。在Python中,traceback是一个用来跟踪异常错误信息的标准库,常用于异常处理和调试。它可以帮助开发者了解异常发生的上下文,并提供关于异常发生处的调用堆栈的信息。在实际开发中,通过使用traceback模块,可以更清晰地看到错误发生的位置及其前后调用关系,从而帮助快速定位并修复问题。

✨一、traceback介绍

如下的函数中,如果只是普通的print的话,这里输出的error并不能让我们很好的找到具体错误的地方,但如果换成traceback的方式,就能很好的定位错误信息了。

import tracebackdef function_a():print("function_a")function_b()def function_b():print("function_b")function_c()def function_c():print("function_c")raise Exception("error")if __name__ == '__main__':try:function_a()except Exception as e:# print(e)traceback.print_exc()'''
print输出方式:
function_a
function_b
function_c
error
''''''
Traceback方式输出:
Traceback (most recent call last):File "D:\PycharmProjects\debug_test\psutil_test.py", line 29, in <module>function_a()File "D:\PycharmProjects\debug_test\psutil_test.py", line 14, in function_afunction_b()File "D:\PycharmProjects\debug_test\psutil_test.py", line 19, in function_bfunction_c()File "D:\PycharmProjects\debug_test\psutil_test.py", line 24, in function_craise Exception("error")
Exception: error
'''

🌟1.1 traceback.print_exc():

traceback.print_exc(limit=None, file=None, chain=True)

📌说明:

这个函数用于打印异常信息到标准错误输出(通常是控制台)。它是在知道发生异常但希望程序能继续运行(不崩溃退出)时使用的。如果提供,file参数允许你指定一个输出流,它可以是任何有write()方法的对象,比如文件或者io.StringIO对象。

limit参数用于限定堆栈跟踪信息的打印深度。如果是正数,表示从堆栈的顶部(即异常发生点)开始的最大帧数;如果是负数,表示从堆栈的底部开始的最大帧数。默认(None)则打印全部堆栈信息。
file 参数默认为None,这意味着错误信息将被打印到sys.stderr。通过提供file参数,可以将错误信息输出到其他地方。
chain 参数控制是否显示异常链(对于Python3.3+引入的异常链)。如果为True(默认),则会连同原始异常(如果有的话)一起打印。

打印到标准错误的异常信息,这是使用traceback的最常见方式。如果你不确定如何处理某个异常,可以使用这个函数打印出异常信息而不让程序崩溃。

import traceback
import sysdef func1():raise IOError("An io error occurred")def func2():func1()try:func2()
except:print("Caught an exception:")traceback.print_exc()

在这里插入图片描述

🌟1.2 traceback.format_exc():

traceback.format_exc(limit=None, chain=True)

与print_exc()类似,这个函数返回异常的跟踪信息字符串而不是将其打印出来。可以用来获取异常信息,便于日志记录或通过网络发送。
📌说明

limit 参数作用与print_exc()中相同,用于限制堆栈跟踪信息的深度。 chain
参数与print_exc()中的用法一样,控制是否包含异常链信息。
这个函数非常有用,当你想要将异常信息记录到日志文件或者数据库,或者需要将异常信息通过网络发送到其他系统进行分析时。

import traceback
import sysdef func1():raise IOError("An io error occurred")def func2():func1()try:func2()
except:print("\nFormatted Exception Information:")print(traceback.format_exc())

在这里插入图片描述

🌟1.3 traceback.extract_tb():

traceback.extract_tb(tb, limit=None)

此函数用于从traceback对象(通常是通过sys.exc_info()得到的)提取堆栈跟踪条目,并以一个列表的形式返回。每个条目是一个四元组(filename, line number, function name, text),表示堆栈中的一个级别。
📌说明

tb 参数是一个traceback对象,必须提供。 limit
参数同样用来控制返回的堆栈跟踪条目的数量。规则同print_exc()和format_exc()中的limit参数。
通过这个函数,你可以得到一个堆栈跟踪的详细列表,这对于分析异常的原因和定位问题发生的代码位置非常有用。你可以遍历这个列表,得到每一级堆栈的文件名、行号、函数名和具体的代码行。

import traceback
import sysdef func1():raise IOError("An io error occurred")def func2():func1()try:func2()
except:exc_type, exc_value, exc_tb = sys.exc_info()print("\nExtracted traceback from traceback object:")extracted_tb = traceback.extract_tb(exc_tb)for frame in extracted_tb:filename, lineno, func_name, text = frameprint(f"File : {filename}, Line : {lineno}, Func.Name : {func_name}, Text : {text}")

在这里插入图片描述
func1() 函数定义并抛出了一个IOError。
func2() 函数调用了func1()。
在try-except块中,我们调用了func2()并捕获了由func1()抛出的异常。
然后我们分别使用了traceback模块的三个函数:print_exc()打印了异常的堆栈跟踪信息到标准错误,format_exc()获取了格式化的异常信息并打印出来,然后我们使用extract_tb()来获取堆栈跟踪信息的详细列表,并逐个打印出了每个堆栈帧的信息。
通过这样的示例,可以看到如何在代码中使用traceback模块来帮助诊断和调试程序异常问题。

✨小结:

traceback 模块提供了强大的 traceback 跟踪功能,可以帮助我们更方便地调试程序和处理异常。除了基本的打印功能之外,它还提供了一些高级用法,例如将 traceback 信息保存到字符串中、定制 traceback 处理器等等,可以帮助我们更加灵活地使用 traceback 模块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/830437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无人机证书的含金量

无人机证书的含金量主要取决于以下几个因素&#xff1a; 1. 颁发机构&#xff1a;不同的机构颁发的无人机证书可能有不同的认可度。一些知名的无人机制造商、行业协会或政府机构颁发的证书通常具有较高的含金量&#xff0c;因为这些机构通常具备较高的权威性和专业性。 2. 培…

Docker搭建LNMP+Wordpress

一.项目模拟 1.项目环境 公司在实际的生产环境中&#xff0c;需要使用 Docker 技术在一台主机上创建 LNMP 服务并运行 Wordpress 网站平台。然后对此服务进行相关的性能调优和管理工作。 安装包下载&#xff1a; wget http://101.34.22.188/lnmp_wordpress/mysql-boost-5.7…

【Jenkins】持续集成与交付 (十):Tomcat 8.5.99 安装和配置详解

🟣【Jenkins】持续集成与交付 (十):Tomcat 8.5.99 安装和配置详解 一、安装 Tomcat 8.5.991.1 上传 Tomcat 压缩包1.2 安装 JDK(如果尚未安装)1.3 解压 Tomcat 压缩包1.4 创建目标目录并移动 Tomcat 文件1.5 启动 Tomcat二、配置 Tomcat 用户角色权限2.1 添加用户及权限…

数论-整除

点个关注吧&#xff0c;谢谢&#xff01; 后面将继续更新数论基础&#xff0c;如果内容有问题&#xff0c;请私信我。 定义&#xff1a; 设 a , b ∈ Z a,b\in \mathbb{Z} a,b∈Z&#xff0c;如果存在整数 c ∈ Z c \in \mathbb{Z} c∈Z&#xff0c;使得 b a c bac bac&#x…

记录k8s以docker方式安装Kuboard v3 过程

原本是想通过在k8s集群中安装kuboad v3的方式安装kuboard&#xff0c;无奈在安装过程中遇到了太多的问题&#xff0c;最后选择了直接采用docker安装的方式&#xff0c;后续有时间会补上直接采用k8s安装kuboard v3的教程。 1.kuboard安装文档地址&#xff1a; 安装 Kuboard v3 …

【机器学习】视觉基础模型的三维意识:前沿探索与局限

视觉基础模型的三维意识&#xff1a;前沿探索与局限 一、引言二、视觉基础模型的三维意识三、当前模型的局限性四、实验与结果五、总结与展望 大规模预训练的进展已经产生了具有强大能力的视觉基础模型。最近的模型不仅可以推广到任意图像的训练任务&#xff0c;而且它们的中间…

java Swagger 配置技巧

文章目录 引言I Swagger1.1 组成部分1.2 springfox1.3 api扫描配置II Knife4j文档的使用III 注解3.1 接口标签(分类)3.2 接口说明IV 日期格式化引言 后端修改了接口,需要手动维护api文档,加大了开发的工作量和困难,而swagger的出现就是为了解决这一系列的问题。 swagger…

探索Linux中的VI编辑器:全方位命令详解与实战应用

探索Linux中的VI编辑器&#xff1a;全方位命令详解与实战应用 引言一、VI编辑器的三种模式二、VI中的翻页操作三、搜索与替换功能四、退出VI编辑器应用场景举例&#xff1a;总结 引言 VI编辑器作为Linux世界中的基石工具之一&#xff0c;其简洁高效的设计理念贯穿了多种操作系统…

数据库索引(Mysql)

简述:数据库索引是加速数据检索,提高查询效率的一种数据结构 语法规则 创建索引 --通用语法规则 --[内容] 可选参数 --UNIQUE: 可选关键字&#xff0c;用于创建唯一索引&#xff0c;确保索引列的值是唯一的 CREATE [UNIQUE] INDEX 索引名 ON 表名(字段名,...) [ASC | DESC];…

【AIGC调研系列】LLaVA++整合Phi-3和Llama-3能够实现什么

LLaVA能够为Phi-3和Llama-3带来的主要好处包括&#xff1a; 视觉处理能力的增强&#xff1a;通过整合Phi-3和Llama-3模型&#xff0c;创建了具备视觉处理能力的Phi-3-V和Llama-3-V版本&#xff0c;这意味着这些模型现在能够理解和生成与图像相关的内容[1]。这种能力的增加&…

第G9周:ACGAN理论与实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 上一周已经给出代码&#xff0c;需要可以跳转上一周的任务 第G8周&#xff1a;ACGAN任…

ARP学习及断网攻击

1.什么是ARP ARP&#xff08;Address Resolution Protocol&#xff09;是一种用于在IPv4网络中将IP地址映射到MAC地址的协议。在计算机网络中&#xff0c;每个网络接口都有一个唯一的MAC地址&#xff08;Media Access Control address&#xff09;&#xff0c;用于识别网络设备…

c#创建新项目

确保已安装.NET Core SDK。&#xff08;visual studio installer中可安装&#xff09; cmd中先引用到文件夹目录下。 mkdir MyConsoleApp MyConsoleApp是项目文件夹的名字。 mkdir 是一个命令行工具&#xff0c;用于在文件系统中创建新的目录&#xff08;文件夹&#xff09;…

TCP协议在物联网中实战

一、TCP协议介绍 网上对TCP协议介绍众多&#xff0c;本人按照自己的理解简单介绍一下。 TCP&#xff08;Transmission Control Protocol&#xff0c; 传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输控制层通信协议。 1.1 协议机制 1.1.1 三次握手 &…

消息队列 RabbitMQ python实战

目录 RabbitMQ使用完整代码 Rabbitmq报错pika.exceptions.IncompatibleProtocolError StreamLostError (‘Transport indicated EOF‘,) 我的解决方法: 安装: pip install pika RabbitMQ使用完整代码 import asyncio import json import os import queue import time…

imx6ull配置交叉编译环境编译u-boot及linux所遇问题解决记录

文章目录 前言一、问题 1 及解决方法1、问题 1 描述2、问题 1 解决方法 二、问题 2 及解决方法1、问题 2 描述2、问题 2 解决方法 三、问题 3 及解决方法1、问题 3 描述2、问题 3 解决方法 四、问题 4 及解决方法1、问题 4 描述2、问题 4 解决方法 前言 CoM-iMX6UL(L) 是一款兼…

手机端如果要想玩脱,就是玩loop refresh to death

如果“Refresh”作为一个手机漏洞的概念被提出&#xff08;实际上&#xff0c;“Refresh”本身通常不是一个特指的手机漏洞&#xff0c;但我们可以假设它是某种与界面刷新或数据更新相关的安全漏洞&#xff09;&#xff0c;那么潜在的攻击者可能会利用这种漏洞来执行各种恶意操…

linux远程访问及控制

一、SSH远程管理 1.SSH的简介 SSH远程管理是一种通过 SSH 协议安全地管理远程计算机的方法。允许管理员通过加密的连接从本地计算机或其他远程位置连接到远程计算机&#xff0c;并执行管理任务、配置设置、故障排除等操作。 远程链接的两种方法&#xff1a;SSH 、Telnet S…

Hadoop学习-MapReducer

MapReducer 目录 MapReducer 1.Hadoop是干嘛的 2.maven 3.MapReducer 1&#xff09;分析数据 写sql 2&#xff09;写程序 a.mapper程序 b.洗牌 分组排序 c.reducer程序 d.Test类 1.Hadoop是干嘛的 1&#xff09;分布式存储 HDFS 2&#xff09;处理大规模数据 Map…

Jammy@Jetson Orin Nano - Tensorflow GPU版本安装

JammyJetson Orin Nano - Tensorflow GPU版本安装 1. 源由2. 问题3. 分析3.1 当前版本Tensorflow 2.16.13.2 GPU版本二进制安装3.3 GPU版本源代码安装3.3.1 问题1 ERROR: no such target //tensorflow/tools/pip_package:wheel3.3.2 问题2 fatal error: cstddef file not found…