You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.6如何将traceback.extract_stack输出转为2.7元组格式?

在Python 3.6中兼容Python 2.7的traceback.extract_stack输出格式

要在Python 3.6中得到和Python 2.7一致的栈追踪格式,核心是把traceback.extract_stack()返回的FrameSummary对象转换为对应的元组。

关键属性对应关系

Python 3.6的FrameSummary对象包含四个属性,正好匹配Python 2.7返回元组的四个元素:

  • filename → 元组第1位(文件名)
  • lineno → 元组第2位(行号)
  • name → 元组第3位(函数/模块名称)
  • line → 元组第4位(该行的代码文本)

格式转换实现

用列表推导式遍历栈追踪结果,将每个FrameSummary对象转换成元组即可。如果遇到无法获取代码行的情况(line为None),用空字符串替代,保证格式统一。

修改后的测试代码

import traceback

def fun2():
    tx = traceback.extract_stack()
    # 转换为Python2.7兼容的元组列表格式
    compatible_stack = [(frame.filename, frame.lineno, frame.name, frame.line or '') for frame in tx]
    print(compatible_stack)

def fun1():
    si = 'Hello'
    fun2()

fun1()
fun2()

运行结果

执行后输出会和Python 2.7版本完全一致:

[('a1.py', 11, '<module>', 'fun1()'), ('a1.py', 10, 'fun1', 'fun2()'), ('a1.py', 5, 'fun2', 'tx = traceback.extract_stack();')]
[('a1.py', 12, '<module>', 'fun2()'), ('a1.py', 5, 'fun2', 'tx = traceback.extract_stack();')]

内容的提问来源于stack exchange,提问作者sardesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:01:02