当前位置: 首页 > news >正文

traceback 模块

在 Python 中,traceback 模块用于提取、格式化和打印异常的回溯信息(即错误发生时的调用堆栈)。它可以帮助你在日志中记录错误细节,或在程序中以字符串形式获取完整的错误信息。

常用函数

函数 说明
traceback.print_exc() 直接将当前异常的堆栈信息打印到标准错误输出(或指定文件)
traceback.format_exc() 返回当前异常的堆栈信息字符串,可被记录或打印
traceback.print_exception() 更灵活地打印异常(需传入异常对象)
traceback.extract_tb() 从回溯对象中提取堆栈条目(常用于解析逐帧信息)
traceback.format_tb() 将提取的堆栈条目格式化为字符串列表

典型用法

1. 捕获异常并打印堆栈

```python
import traceback

try:
1 / 0
except ZeroDivisionError:
traceback.print_exc() # 自动输出到 stderr
```

2. 获取异常信息字符串(用于日志)

```python
import traceback

try:
open("nonexist.txt")
except FileNotFoundError:
err_msg = traceback.format_exc()
print("错误详情:", err_msg) # 实际可写入日志文件
```

3. 结合 sys.exc_info() 手动控制

```python
import sys, traceback

try:
[1,2,3][5]
except IndexError:
exc_type, exc_value, exc_tb = sys.exc_info()
print("异常类型:", exc_type.__name__)
print("异常值:", exc_value)
# 获取堆栈帧信息
stack_summary = traceback.extract_tb(exc_tb)
print("堆栈摘要:", stack_summary)
```

4. 仅获取最后几层堆栈(限制深度)

```python
try:
recursive_func() # 假设递归过深
except RecursionError:
limited_tb = traceback.format_exc(limit=3) # 只显示最近3层
print(limited_tb)
```

注意事项

· traceback.format_exc() 在没有异常时返回 None,通常应放在 except 块内使用。
· 若需要记录完整异常(包括被抑制的异常链),可用 ExceptionGroup 或 __cause__,但 traceback 会默认展示 raise ... from ... 的关系。
· 在日志记录中,推荐使用 logging.exception("msg"),它内部会自动调用 traceback.format_exc()。

对比 traceback 与直接 print(e)

· print(e) 只显示异常的消息(如 division by zero)
· traceback.print_exc() 会显示完整的调用栈,更利于调试。

如果你需要更精细地控制堆栈条目(比如只获取文件名、行号、函数名),可以用 extract_tb():

```python
import traceback
try:
raise ValueError("demo")
except ValueError:
tb_list = traceback.extract_tb(sys.exc_info()[2])
for frame in tb_list:
print(f"{frame.filename}:{frame.lineno} in {frame.name} -> {frame.line}")
```

这样就能清晰定位到每个调用帧。

http://www.cnnetsun.cn/news/2864168.html

相关文章:

  • 手把手教学:AI智能体辅助临床科研——数据清洗、分析、论文写作全流程
  • 学习笔记:C 语言函数全解析与底层内存探秘
  • 用Cursor开启JAVA+AI生涯
  • 《从传统开发到PHP工作流:效能提升的秘密武器》
  • 支持美团/京东/拼多多三平台的代付系统源码,含多前端模板与一键部署方案
  • 云边云科技亮相 2026 WOD 制造业数智化博览会 云网融合赋能制造焕新
  • Mac微信防撤回终极指南:3分钟解锁完整聊天记录保护
  • 华为云发布Agentic AI系列新品 打造智能时代“硅基黑土地”
  • WarcraftHelper:解决魔兽争霸III玩家三大核心痛点的专业工具
  • 5分钟快速搭建个人游戏云:Sunshine串流服务器完整指南
  • 图片贝叶斯分类小工具:命令行+点击选点GUI双模式,开箱即用
  • 计算机毕业设计之基于python的教学管理系统
  • 状态压缩 DP 与树形 DP:从空间优化到树状结构的动态规划
  • 070、多帧降噪工程化:MFNR 的帧对齐、鬼影检测与融合权重的完整流程
  • 用于心脏网格重建的显式可微切片与全局变形-文献速递/多模态医学影像最新进展
  • ChatGPT Plus、Claude Pro、Gemini Pro 怎么选?国内用户别乱花钱
  • Dify日志与标注时间显示问题
  • 光伏座椅系统集成设计与工程实践要点
  • CentOS 7.9 安装postgreSQL数据库
  • 50个电影级人物情绪提示词(附使用公式)
  • 如何在Mac上免费解锁视频预览终极指南:让MKV、AVI等格式瞬间可视化
  • 浏览器的同源策略以及跨源问题 ( 浏览器的同域策略以及跨域问题)
  • 【AI面试】小白理解大模型:仅编码器(BERT类)、仅解码器(GPT类)和完整的编码器-解码器架构各有什么优缺点?
  • 户外移动空调工厂哪家专业
  • ubuntu22.04.2安装英伟达驱动
  • Web应用项目接口架构搭建学习心得(实操干货)
  • 双膜气柜内膜保护技术:从主动泄压到多重冗余的安全设计
  • 亚马逊关闭AI榜单,腾讯云ADP 4.0能否破解企业AI落地难题?
  • 分享一下我AI_Agent学习路线!
  • 性价比高的个人IP包装机构