gpt4 book ai didi

python - 在异常上下文中获取函数的堆栈帧

转载 作者:行者123 更新时间:2023-12-01 05:46:51 26 4
gpt4 key购买 nike

在下面的示例代码中,我打算获取装饰函数的被调用者的堆栈帧。假设,装饰函数 power(如下)调用 pwr 函数,并且有一个异常(exception),我想获取 pwr 的堆栈帧(以打印函数参数)。对于 api 中公开的函数,会打印其参数和响应,但模块内部的函数和 api 调用的函数,我想获取这些堆栈帧。

import inspect
def api(func):
def decor(*args, **kwargs):
try:
print "Request %s %s %s" % ( func.__name__, args, kwargs)
response = func(*args,**kwargs)
print "response %s", response
return response
except Exception, e:
print "exception in %s", func.__name__
for frame in inspect.stack():
print frame[3]
raise e
return decor

@api
def power(a,b):
return pwr(a,b)

def pwr():
...
...

当我运行代码时,在异常期间,我从decor和向上获取堆栈帧,但不是从func或以下获取堆栈帧。有人可以建议吗?

最佳答案

如果你想查看异常发生的上下文,你需要查看从 sys.exc_info() 返回的第三个值(“traceback 对象”)。 。 traceback module有一些有用的函数来处理这些对象:您可以使用 traceback.print_tb .

例如:

>>> import sys, traceback
>>> try: raise Exception()
... except: traceback.print_tb(sys.exc_info()[2])
...
File "<stdin>", line 1, in <module>

关于python - 在异常上下文中获取函数的堆栈帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15808683/

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