gpt4 book ai didi

python - 重现导致堆栈帧的调用?

转载 作者:行者123 更新时间:2023-11-28 22:05:34 25 4
gpt4 key购买 nike

在 Python 中是否有标准方法来repr 导致给定堆栈帧的调用?如果做不到这一点,是否有手动完成此操作的好方法?

举个例子:

def some_call(*args, **kwargs):
print('{}({})'.format(
'some_call',
', '.join(itertools.chain(
map(repr, args),
('{}={!r}'.format(k, kwargs[k]) for k in kwargs)))))

>>> some_call(1, 2, a=3)
some_call(1, 2, a=3)

我正在尝试记录某些调用,并且正在编写一个装饰器来记录对包装函数的调用以及完整的详细信息。我做错了吗?

最佳答案

我不太确定你在问什么,但你可以使用 inspect模块获取所有当前堆栈信息。

f = inspect.currentframe()
print(f.f_locals)
print(inspect.getframeinfo(f))

您可以使用 inspect.getargvalues 重新生成当前帧的调用,并根据您的喜好格式化

def some_call(arg1, arg2, *args, **kwargs):
f = inspect.currentframe()
fn_name = inspect.getframeinfo(f)[2]
arginfo = inspect.getargvalues(f)
args = [repr(arginfo.locals[arg]) for arg in arginfo.args]
varargs = [repr(x) for x in arginfo.locals[arginfo.varargs]]
kwargs = [', '.join(str(k)+"="+repr(v) for k,v in
arginfo.locals[arginfo.keywords].items())]
print('{0}({1})'.format(fn_name, ', '.join(args + varargs + kwargs)))

>>> some_call(1, 2, "hi", kw1="frob")
some_call(1, 2, 'hi', kw1='frob')

关于python - 重现导致堆栈帧的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5079779/

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