将参数值打印到堆栈跟踪中的函数中

问题描述 投票:0回答:1

打印错误堆栈跟踪信息时,是否可以在调用堆栈中打印传递给函数的参数值?

示例:

Traceback (most recent call last):
  File "./file.py", line 615, in func0 **(arg0) arg0 = 0 was passed**
    result = func1(arg1, arg2)
  File "./file.py", line 728, in func1 **(arg1, arg2) arg1 = 1 and arg2 = 2 was passed**
    return int_value[25]
TypeError: 'int' object is not iterable

我希望除了堆栈跟踪中的正常输出外,还打印上面**中的信息。通常不是。

我搜索了很多,发现了以下相关问题:

但是他们两个人的答案都对我没有用:第一个答案导致了ModuleNotFoundError: No module named 'stackdump'。第二个崩溃了我的ipython解释器。

我也抬起头来:

capture_locals似乎有TracebackException变量,但我不太了解如何使用它。

python debugging stack-trace
1个回答
0
投票

可能存在更好的替代方法,但是您可以为此使用装饰器:

def print_stack_arguments(func):
    def new_func(*original_args, **original_kwargs):
        print('Function: ', func.__name__)
        print('Args: ', original_args)
        print('Kwargs: ', original_kwargs)
        return func(*original_args, **original_kwargs)
    return new_func


@print_stack_arguments
def print_error(value):
    raise Exception('Any exception')


print_error('testing exception')
© www.soinside.com 2019 - 2024. All rights reserved.