gpt4 book ai didi

python - 在 python 中格式化异常以包括除最后 'n' 回溯帧之外的所有帧

转载 作者:太空宇宙 更新时间:2023-11-03 14:22:35 25 4
gpt4 key购买 nike

假设您有这样的设置:

def a():
b()

def b():
c()

def c():
d()

def d():
e()

尝试调用 a() 将导致以下回溯:

Traceback (most recent call last):
File "<pyshell#181>", line 1, in <module>
a()
File "<pyshell#87>", line 2, in a
b()
File "<pyshell#90>", line 2, in b
c()
File "<pyshell#93>", line 2, in c
d()
File "<pyshell#96>", line 2, in d
e()
NameError: name 'e' is not defined

有什么方法可以格式化异常,使其仅包含回溯中的最后 n 帧?例如,如果 n = 2,回溯将如下所示:

Traceback (most recent call last):
File "<pyshell#93>", line 2, in c
d()
File "<pyshell#96>", line 2, in d
e()
NameError: name 'e' is not defined

我已经对它进行了一些修改,但想不出一个办法来做到这一点。

最佳答案

从 Python 3.5 开始,函数来自 traceback module支持负限制(最初的提议是受你的问题启发并得到 Guido 批准的):

import traceback

n = 2

try:
a()
except:
traceback.print_exc(limit=-n) # `n` last traceback entries

输出

Traceback (most recent call last):
File "/home/vaultah/test.py", line 8, in c
d()
File "/home/vaultah/test.py", line 11, in d
e()
NameError: name 'e' is not defined

即使您使用较旧的 Python,您也可以复制此行为

import sys, traceback

n = 2

try:
a()
except:
ex = traceback.format_exception(*sys.exc_info())
sys.stderr.write(''.join([ex[0]] + ex[-n-1:]))
# or print(*[ex[0]] + ex[-n-1:], sep='', end='', file=sys.stderr)

输出将完全相同。

关于python - 在 python 中格式化异常以包括除最后 'n' 回溯帧之外的所有帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25472412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com