Last active
May 24, 2020 11:33
-
-
Save mahirchavda/b5af2caf70c28a3833ff2c7a33681237 to your computer and use it in GitHub Desktop.
Trace python function calls, arguments and return values
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from functools import wraps | |
indent = 0 | |
def trace(func): | |
@wraps(func) | |
def function_wrapper(*args, **kwargs): | |
"""function_wrapper of trace""" | |
global indent | |
print("{indent} HI {func_name}, args={args}, kargs={kwargs}".format(indent="\t"*indent, func_name=func.__name__, args=args, kwargs=kwargs)) | |
indent += 1 | |
res = func(*args, **kwargs) | |
indent -= 1 | |
print("{indent} Bye {func_name}, return={ret_val}".format(indent="\t"*indent, func_name=func.__name__, ret_val=res)) | |
return res | |
return function_wrapper | |
if __name__ == "__main__": | |
# Demo | |
@trace | |
def a(*args, **kwargs): | |
return "a_out" | |
@trace | |
def b(*args, **kwargs): | |
c("c1", "c2") | |
return "b_out" | |
@trace | |
def c(*args, **kwargs): | |
return "c_out" | |
@trace | |
def d(*args, **kwargs): | |
return "d_out" | |
@trace | |
def main(): | |
a("a1", "a2") | |
b("b1", "b2") | |
d("d1", "d2") | |
main() | |
# Output: python trace.py | |
""" | |
HI main, args=(), kargs={} | |
HI a, args=('a1', 'a2'), kargs={} | |
Bye a, return=a_out | |
HI b, args=('b1', 'b2'), kargs={} | |
HI c, args=('c1', 'c2'), kargs={} | |
Bye c, return=c_out | |
Bye b, return=b_out | |
HI d, args=('d1', 'd2'), kargs={} | |
Bye d, return=d_out | |
Bye main, return=None | |
""" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment