From Stefan Ram@21:1/5 to All on Sat Feb 11 18:02:55 2023
main.py
import io
import sys
import trace
def factorial( n ):
return n * factorial( n - 1 ) if n else 1
def main():
factorial( 2 )
tracer = trace.Trace\
( ignoredirs=[ sys.prefix, sys.exec_prefix ], trace=1, count=1 )
old_stdout = sys.stdout; sys.stdout = io.StringIO()
tracer.run( 'main()' )
for line in sys.stdout.getvalue().split('\n'):
if 'modulename' not in line:
print( line, file=old_stdout )
output
main.py(9): factorial( 2 )
main.py(6): return n * factorial( n - 1 ) if n else 1
main.py(6): return n * factorial( n - 1 ) if n else 1
main.py(6): return n * factorial( n - 1 ) if n else 1
previous "from my lab" posts
Adding "start" and "end" methods to a logger
1 How a function can get its own name
2 Logging function entry and exit
3 Logging function entry and exit with indentation