当前位置: 首页 > 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.jsqmd.com/news/988817/

相关文章:

  • 2026年新消息:杭州知名舞美设备租赁平台综合服务解析 - 品牌鉴赏官2026
  • 意图共鸣科技《AI记忆链商业化白皮书3.0》精读:第二大脑,你的AI参谋
  • 基于3D-DFT架构下的ICL文件生成(DFT)
  • 数据的加密与解密(23:46)
  • Mac微信防撤回终极指南:3分钟解锁完整聊天记录保护
  • 2026广州中高端财税服务商权威测评:合规评级与服务能力双维度排行 - 互联网科技品牌测评
  • RN/hook/TS
  • Makepad 界面怎么做得更像产品,而不是示例
  • 宜兴住宅智能家居装修前应该怎么规划:先把点位、布线和验收边界说清楚
  • Grounding DINO实战:开放词汇目标检测上手指南
  • 终于不用再“盲猜”了:一位硬件工程师的 SC2010 使用手记
  • 2026 湛江市 GEO 推广优化服务商 TOP5 权威排名完整新闻合集(含榜单表格) - 广东科技观察
  • 数据的加密与解密(23:55)
  • 品牌人,快去劝老板做GEO!告别被动营销,让品牌效果彻底可视化
  • Authlib:Python OAuth 与 OpenID Connect 服务端库
  • 代付分账核心方案:备付金直付 + 多层分账
  • 软考中级第3版教材怎么学?按这个顺序效率翻倍
  • 2026年 Geo优化服务商推荐排行榜:SEO本地化排名、Google地图排名与多语言站点Geo优化公司实力解析 - 品牌发掘
  • HttpPrinter的url地址或者说json过长的解决问题
  • TranslucentTB如何让Windows任务栏焕然一新?透明化美学的全面解析
  • 苹果秋季将推Siri AI更新,聚焦用户需求带来全新对话体验
  • 大模型API聚合平台技术架构深度对比:六大平台协议转换、路由调度与安全治理全解析 - 微元算力(weytoken)
  • 解决JDY-31蓝牙模块指令交互无响应问题:EN使能脚的关键作用
  • 微信网页版插件:5分钟解决无法访问问题,享受便捷网页聊天体验
  • 宇树科技,即将上市!
  • Balatro后端进阶(3):为什么机制设计比写代码更难
  • 2026年5月成都宠物航空托运靠谱服务商攻略|正规有氧舱 安全不踩坑 - TOP10品牌推荐榜单
  • IBM MQ特性-- 面向零停机世界的弹性
  • 我的 Agent 真的能提效 —— 深信服 FastGPT 平台赋能业务革新
  • 创新驱动中国制造业的智能化转型**