当前位置: 首页 > 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.rkmt.cn/news/1500564.html

相关文章:

  • 2026年新消息:杭州知名舞美设备租赁平台综合服务解析 - 品牌鉴赏官2026
  • Mac微信防撤回终极指南:3分钟解锁完整聊天记录保护
  • 基于3D-DFT架构下的ICL文件生成(DFT)
  • Grounding DINO实战:开放词汇目标检测上手指南
  • 2026 湛江市 GEO 推广优化服务商 TOP5 权威排名完整新闻合集(含榜单表格) - 广东科技观察
  • 品牌人,快去劝老板做GEO!告别被动营销,让品牌效果彻底可视化
  • HttpPrinter的url地址或者说json过长的解决问题
  • 苹果秋季将推Siri AI更新,聚焦用户需求带来全新对话体验
  • 2026年5月成都宠物航空托运靠谱服务商攻略|正规有氧舱 安全不踩坑 - TOP10品牌推荐榜单
  • 宇树科技,即将上市!
  • Claude Code 代码库迁移评估流程:目录扫描、依赖分析和风险清单
  • 数据的加密与解密(23:53)
  • 2026年 惠州变压器回收最新推荐:专业处置油式/干式/箱式废旧变压器及二手设备公司盘点 - 品牌发掘
  • 数据的加密与解密(23:39)
  • CompletableFuture 详细讲解
  • 单配六维力传感器采集卡/模块的方法 EtherCAT ECT-FT6B北京锐灵科技ray0.cn
  • 【新 Linux 服务器上手全攻略】系统巡检、存储规划与开发环境初始化
  • 报销流程混乱,问题到底出在哪里?
  • 华为云发布Agentic AI系列新品 打造智能时代“硅基黑土地”
  • 聊天式 AI 剪辑工作流解析:自然语言如何驱动多步视频处理
  • 微信网页版终极解决方案:wechat-need-web 浏览器扩展实用指南
  • Beyond Compare 5终极激活指南:5分钟解锁完整功能
  • i.MX 7ULP异构多核架构解析:平衡性能与功耗的嵌入式设计实践
  • 2026年6月成都本地人私藏高分火锅合集|全店口碑4.8分+,闭眼吃不踩坑 - TOP10品牌推荐榜单
  • 描述符(Descriptors)‌
  • 2026年绕线机厂家推荐榜:电线电缆/铜丝钢丝/高速伺服自动绕线机优质品牌深度解析 - 品牌发掘
  • 第 15 集:Claude Code上下文工程学 —— 根治“80% 问题”
  • 如何打造个人专属的数字记忆库:从微信数据到生活足迹的完整指南
  • 非技术背景AIPM技术学习攻略:不学废、不内卷、刚好够用
  • AIOps 智能日志模式挖掘与异常关联:从日志海洋到结构化洞察