pythondebuggingstack-trace

Print current call stack from a method in code


In Python, how can I print the current call stack from within a method (for debugging purposes).


Solution

  • Here's an example of getting the stack via the traceback module, and printing it:

    import traceback
    
    def f():
        g()
    
    def g():
        for line in traceback.format_stack():
            print(line.strip())
    
    f()
    
    # Prints:
    # File "so-stack.py", line 10, in <module>
    #     f()
    # File "so-stack.py", line 4, in f
    #     g()
    # File "so-stack.py", line 7, in g
    #     for line in traceback.format_stack():
    

    If you really only want to print the stack to stderr, you can use:

    traceback.print_stack()
    

    Or to print to stdout (useful if want to keep redirected output together), use:

    traceback.print_stack(file=sys.stdout)
    

    But getting it via traceback.format_stack() lets you do whatever you like with it.